我希望在用户在我的应用中创建任务时显示信息性消息 . 我已经做了一段时间的反应,但我无法想到显示消息后显示消息的逻辑 .
这是当前的设置
App.js 使用反应路由器dom路由到不同页面的主要组件,如下所示:
class App extends Component {
constructor(props) {
super(props);
this.state = {
taskCreated: false,
};
}
showTaskCreatedAlert = () => {
this.setState({ taskCreated: true });
};
render() {
return (
<Router>
<div>
<Switch>
<Route
exact
path="/"
component={props => <TasksIndex {...this.state} />}
/>
<Route
path="/users/new"
component={props => (
<TasksNew
showTaskCreatedAlert={this.showUserCreatedAlert}
{...props}
/>
)}
/>
</Switch>
</div>
</Router>
);
}
}
TasksNew.js 呈现用户可以创建任务的表单的组件
成功创建任务后,我在父组件上更新状态(App.js并将taskCreated设置为true . 然后我将历史记录推送到根资源“/” .
TasksIndex.js 呈现用户创建的所有任务的组件此组件获取作为props传递给它的主要组件状态,并且根据taskCreated是设置为true还是false,它将显示该信息性消息
一切都很好,除非用户导航到/ users / new并返回后消息不会消失 . 只有完全重新加载它才会消失 . 现在我知道为什么会发生这种情况:父组件的状态永远不会更新,taskCreated仍然为true .
但那么如何实现这一目标呢?一旦用户导航到应用程序中的其他页面,我怎样才能使消息消失 . 我想在没有redux的情况下完成这个 .
1 回答
您需要的只是在任何应用程序路径更改后将您的父组件的状态taskCreated更改为false . 您可以通过订阅浏览器历史记录来完成此操作: