Я хотел бы сравнить размытие текстового поля, если значение изменилось между полученными реквизитами и состоянием. Если да, я что-то запускаю, иначе ничего не делаю.
Я инициализировал состояние вот так:
constructor(props){
super(props);
this.state = {
question : this.props.question,
loadingQuestionsWithAnswers : true,
posting : false,
error : '',
disabled : !isAuthorized('FILL_ASF')
}
}
Мое текстовое поле:
<textarea id = {`answer_${key}`}
placeholder = "A comment ..."
value = {(this.state.question && this.state.question.answer) || ""}
onChange = {event => this.handleAnswer(event.target.value)}
onBlur = {() => this.handleBlurAnswer()}
/>
Меняю состояние в "onChange":
handleAnswer = (value) => {
let question = this.state.question;
question.answer = value;
this.setState({
question : question
}, function(){
console.info('this.props.question dans le handleAnswer', this.props.question.answer);
console.info('this.state.question dans le handleAnswer', this.state.question.answer);
})
}
И я не понимаю, почему тоже изменился this.props.question (в консоли это вижу). Обновил только состояние.
Я новичок в React.





question : this.props.question
Вы назначаете ссылка на объект, чтобы и государство, и реквизит ссылались на один и тот же объект вопрос.
Вам нужно сделать копию объекта вопроса, и это зависит от того, хотите ли вы, чтобы он был глубоким или нет.
мелкий:
question: Object.assign({}, this.props.question)
глубокий:
question: JSON.parse(JSON.stringify(this.props.question))
Не рекомендуется удерживать государство более чем в одной позиции (единственный источник истины) ИМХО
Спасибо cgTag. Это работает именно так, как я ожидал. Но иногда в некоторых других компонентах я инициализирую состояние с помощью props. Это неправильная практика? или нет ?