javascript - 如何将变异状态传递到不同的页面?
问题描述
在我的 App.js 中,我正在创建一个这样的 Route:
<Route
exact path='/tools/ndalink'
render={(props) => (
<React.Fragment>
<Header />
<LinkPage {...props} brokerID={this.state.brokerID}></LinkPage>
</React.Fragment>
)}
/>
state.brokerID 最初是“”,但不久之后发生了变化,因此 LinkPage 将 this.state.brokerID 接收为“”。
如何传递更改后的 state.brokerID(不使用 Redux)?
解决方案
您需要使用生命周期方法来获取组件的道具以等待调用的道具componentDidUpdate
。
话虽如此,只有在您计划对brokerId
.
由于该过程是异步的,因此您必须等待传递道具。直到您可以显示loading
文本或进度条。
class LinkPage extends React.Component {
state = {
builderId: ''
};
componentDidUpdate(prevProps) {
if(this.props.builderId !== prevProps.brokerId) {
this.setState({ builderId: this.props.brokerId });
}
}
render() {
return (
<div className="App">
<h1>{ this.state.builderId ? this.state.builderId : 'Loading' }</h1>
</div>
);
}
}
或者,一个简单的方法是根本不使用生命周期方法,在渲染中更改以下行,它应该可以工作:
<h1>{ this.props.builderId ? this.props.builderId : 'Loading' }</h1>
如果您需要将此 brokerId 用于 api 调用或其他内容,您可以使用setState
callback
. 这将在componentDidUpdate lifecycle method.
componentDidUpdate(prevProps) {
if(this.props.builderId !== prevProps.builderId) {
this.setState({ builderId: this.props.builderId }, () => {
//use this.state.brokerIdhere
});
推荐阅读
- ffmpeg - 使用 ffmpeg 提取具有 SRT 文件上指定时间码的视频帧
- api - o365 管理 api 产品特定架构
- python - 您是否应该在 C++ 中将智能指针用于低级数据结构,例如链接列表?用例可以是面试环境
- php - 一个 PHP 表映射
- java - java - 如何只允许在Java的方法参数中使用一些注释注释的类?
- javascript - 提交后重置表格
- php - 如何使用 .htaccess 更改 url 外观但保留 php 功能?
- javascript - 分别打开 2 个链接的 Javascript
- python - Poetry install --no-dev 需要安装 Rust 吗?
- java - 有没有办法将coinbase与java集成?