【发布时间】:2018-04-21 13:07:53
【问题描述】:
我有两个同一个类的 React 组件,它们有自己的状态存储数据。我基于通过下拉更改传播的父(区域)的道具有条件地渲染组件。在第一次下拉更改时,组件使用第二个组件的 title 属性呈现,但使用第一个组件的数据。在第二个下拉更改中,它按预期工作。
我已经尝试单独测试这些组件,并且它们可以很好地适应区域属性的变化。我还向其中一个组件添加了一个道具和一个条件,以防止在接收道具时重新渲染,但我得到了相同的结果。我可以根据 region 属性隐藏其中一个组件,但我想通过条件渲染来做到这一点。
var content = null;
if(this.props.region === 'WEST'){
content = (<Component title={'A'} region={this.props.region} dataSource={'someURL'} />);
}else{
content = (<Component title={'B'} region={this.props.region} dataSource={'someOTHERURL'} />);
}
return (
{content}
);
编辑更多细节:
组件在 componentDidMount() 和 componentWillReceiveProps() 上都有对后端的 fetch 调用,用于更新组件的状态。组件的每个实例(title={'A'} 和 title={'B'})在无条件渲染时都能正常工作。最初渲染的组件是否有可能在新组件在其位置渲染的同时尝试更新其状态?
fetch('/table?tablename=' + this.props.tableName + '®ion=' +
nextProps.region + '&chartName=' + this.props.chartName, {
method: "GET",
headers: { "Accept": "application/json", "Content-Type": "application/json" }
}).then(res => res.json())
.then(data => this.setState({data: data}));
}
【问题讨论】:
-
您显示的代码没有问题。如果不查看其余代码,则无法找到您的错误。顺便说一句,你可以缩短它:
return (this.props.region === 'WEST') ? <Component title="A" ... /> : <Component title="B" ... />
标签: javascript reactjs