react-native:在componentsWillReciveProps中未更新状态

时间:2017-09-24 12:56:06

标签: javascript react-native

我正在搜索这么多方法来解决这个问题,但是没有人工作,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未更新。

2 个答案:

答案 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”我认为。