Я отправляю значения чисел из компонента «Числа» в «Основной компонент». Все работает нормально, пока я не установил это значение в моем основном компоненте в состояние этого компонента.Когда значение присваивается состоянию компонентов, почему console.log печатает предыдущее состояние?
var Numbers = React.createClass({
handleClick: function(number){
this.props.num(number)
},
render: function(){
return (
<div>
<button onClick={this.handleClick.bind(null, 1)}>1</button>
<button onClick={this.handleClick.bind(null, 2)}>2</button>
<button onClick={this.handleClick.bind(null, 3)}>3</button>
</div>
)
}
})
var Main = React.createClass({
getInitialState: function(){
return {
number: 0
}
},
handleCallback: function(num){
console.log("number is right here: " + num);
this.setState({
number: num
})
console.log("but wrong here (previous number): " + this.state.number)
},
render: function() {
return (
<Numbers num={this.handleCallback} />
//<SomeComponent number={this.state.number} />
)
}
});
React.render(<Main />, document.getElementById('container'));
Почему это так? Второй console.log
в handleCallback
функция печатает предыдущее число, а не номер, который находится в num
параметр. Мне нужно, чтобы номер был в моем состоянии, потому что я отправлю его немедленно в качестве реквизита в моем SomeComponent
компоненте.
https://jsfiddle.net/69z2wepo/13000/
Как бы вы решить вне проблема с 'SomeComponent' ? Теперь я понимаю, почему он не работает, но я понятия не имею, как передать состояние в качестве реквизита только тогда, когда this.state был обновлен. Могу ли я каким-то образом обернуть это ' }' для обратного вызова или чего-то еще? –
StrangeManInMask
Изменение состояния компонента или реквизита заставляет повторную визуализацию, если вы не внедрили 'shouldComponentUpdate', чтобы сказать об этом иначе. Таким образом, как только состояние изменилось в '', оно будет повторно отображать и передать новое число '' SomeComponent /> 'в качестве новой опоры. Если вы внедрили 'componentWillReceiveProps' в' ', вы увидите номер в полученных реквизитах. Имеет ли это смысл? Или вы хотите, чтобы я изменил свой ответ и углубился? –
Вы можете углубиться, если у вас есть время/интерес. Я бы очень благодарен. Моя проблема с ' ' заключается в том, что она не ждет переопределения '' (я полагаю ..), поэтому правильное значение из состояния не отправляется. Я не знаю, как реализовать этот обратный вызов, который вы показали для этого. Возможно, это объясняет немного лучше: https://jsfiddle.net/69z2wepo/13007/ –
StrangeManInMask