【发布时间】:2025-12-18 11:00:02
【问题描述】:
使用 Fluxible 和 react 路由器根据状态存储的更改触发路由更改的最简洁方法是什么?
一个示例组件可能会接受一些用户输入并在点击事件上调用一个动作(为简洁起见)
class NameInput extends React.Component {
constructor (props) {
super(props);
this.state = props.state;
this.handleClick = this.handleClick.bind(this);
}
handleClick (event) {
this.context.executeAction(setName, {name:'Some User Value'});
}
render () {
return (
<div>
<input type="button" value="Set Name" onClick={this.handleClick} />
</div>
);
}
}
export default Home;
handleClick 方法执行一个 Action,它可以用我们的新值更新 Store。
但是如果我也希望它在商店更新后触发导航怎么办?我可以添加router上下文类型,执行Action后直接调用transition方法:
this.context.executeAction(setName, {name:'Some User Value'});
this.context.router.transitionTo('some-route');
但这假设setName Action 是同步的。假设一旦 Action 完成并且 Store 更新后新路由将重新渲染,这在概念上是否安全?
或者,原始组件是否应该监听 Store Changes 并根据对 store 状态的一些评估来启动路由转换?
使用 Fluxible,connectToStores 实现,我可以监听 Store 状态的谨慎变化:
NameInput = connectToStores(NameInput, [SomeStore], function (stores, props) {
return {
name: stores.SomeStore.getState().name
}
});
如何使用这种类型的 Store 监听器来启动路由更改?
【问题讨论】:
标签: javascript reactjs reactjs-flux react-router