我正在搜索这么多方法来解决这个问题,但是没有人工作,setState
仍然没有在componentWillReciveProps
方法中工作,这是我的代码:
export class Detail extends React.Component
{
constructor(props)
{
super(props);
this.state = {
ids: 'ger'
}
}
componentWillReceiveProps(nextProps) {
this.setState({ ids: nextProps.data }, () => {
console.log(nextProps.data+"=this id")
});
}
render()
{
return (
<View>
<Text>{this.state.ids}</Text>
</View>
);
}
}
如果我console.log(nextProps.data+"=this id")
,它可以将我要更新的ID返回给this.state.ids
。但是,在渲染中的<Text>{this.state.ids}</Text>
仍显示默认值this.state.ids
('ger'),表示this.state.ids
中的componentWillReceiveProps
未更新。
答案 0 :(得分:1)
setState()并不总是立即更新组件。
您可以在here上找到所需的一切。
实际上作为反应文件说法&#34; React在安装过程中不会使用初始道具调用componentWillReceiveProps。如果某些组件的道具可能会更新,它只会调用此方法。调用this.setState通常不会触发componentWillReceiveProps。&#34;
您可以找到更多here。
答案 1 :(得分:0)
这看起来像是反模式。为什么不直接将nextProps.data作为ID注入到Detail组件中?然后你可以直接输出id:
<Text>{this.props.ids}</Text>
通常您还应该收到警告,在“componentWillReceiveProps”中调用setState将不起作用。如果你真的想更新你的状态,你可以做“this.state.ids = nextProps.data”我认为。