我有以下代码:
export default class Testing extends Component {
state = ({
data: []
});
componentDidMount() {
this.setState({
data: this.props.values
});
console.log(this.state.posts); //prints empty but if I do
console.log(this.props.values); //prints the array correctly
}
错误在哪里,因为我可以打印道具而不是状态?
谢谢
您没有在this.state.posts
中存储任何内容。您的初始状态仅包含data
。
当您构建初始状态时,也应该这样做:
state = {
data: []
}
您不需要周围的( )
。
如果您要在存储后立即从状态打印一个值,则必须使用状态的回调功能。这是由于setState
是异步的事实,并且需要时间来设置该值。当前,您正在尝试在设置该值之前读取该值,请使用以下回调功能。
this.setState({
data: this.props.values
}, () => console.log(this.state.data));
这是setState
上的一些很棒的文章。
- https://medium.learnreact.com/setstate-is-asynchronous-52ead919a3f0
- https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296
- https://medium.learnreact.com/setstate-takes-a-function-56eb940f84b6
设置初始状态时不需要( )
,因为它是对象。
export default class Testing extends Component {
state = { //remove (
data: []
}; //remove )
也值得注意,setState是异步函数。您将无法在SetState之后直接获得Statate。
为了立即获得状态,您将提供对setState()https://reactjs.org/docs/react-component.html#settate