Одна возможность - здесь недостаточно информации, чтобы сказать наверняка, - это то, что input.value
присутствует, но false
(или ложно), так что вы возвращаетесь к value
опоре, которая undefined
, ив конечном итоге вы устанавливаете checked
на undefined
на своем входе.
Это приводит к неконтролируемому флажку.
Затем, на следующем проходе, либо input.value
, либо props.value
имеетизменилось, и вы установили checked
к реальному значению, что означает, что теперь это управляемый вход, и реакция выдает предупреждение.
В вашем первоначальном случае вы получите value
проп, даже если input.value
явно false
или 0
или пустая строка:
// if input.value === false here you get
// the fallback value which may be undefined
let inputValue = (input && input.value) || value;
В вашем измененном случае ...
let inputValue = value;
if (input) {
inputValue = input.value;
}
... вы избежали этого сценария, потому что вы его предикатируетеналичие input
самого, а не input.value
.