在我的应用程序中,我使用了几个Container
组件。在每个Container
中,都有Buttons
。
根据应用的state
,Buttons
是可点击的(或不是)。是否已禁用Button
,是在每个 state
的本地Container
中进行管理。
可以保存和加载应用程序的结果和状态。
问题出现了:
当我保存(或加载)应用程序时,它非常难以提取提取"来自每个 state
的{{1}}的{{1}}。在全局Buttons
中保存相当容易。
但是如何保存本地Container
来自每个 state (Redux)
和如何将其反馈给每个state
?
通过调用来自子Container
的方法的父Container
来管理阅读本地state
。我知道这是一个反模式,但它确实有效。
Component
有更好的建议吗?
答案 0 :(得分:1)
正如您已经提到的,使用redux具有单一的真实点是一个伟大的意识形态。要将状态“反馈”回容器,您必须将状态和道具映射到组件。
这是一个来自官方文档的容器示例:
import { connect } from 'react-redux'
import { setVisibilityFilter } from '../actions'
import Link from '../components/Link'
const mapStateToProps = (state, ownProps) => {
return {
active: ownProps.filter === state.visibilityFilter
}
}
const mapDispatchToProps = (dispatch, ownProps) => {
return {
onClick: () => {
dispatch(setVisibilityFilter(ownProps.filter))
}
}
}
const FilterLink = connect(
mapStateToProps,
mapDispatchToProps
)(Link)
export default FilterLink
连接完成所有魔法。
答案 1 :(得分:0)
听起来你可以使用Redux而且你错误地将其架构误解为仅仅是全局状态的同义词。 Redux的一个原因是解决了保存多个独立组件状态的问题。
然而,这里有一个完全不同的答案:为什么不使用全局状态序列化程序并将每个组件连接到它?如果你不喜欢引用全局变量的想法,那么更好的选择是创建一种与React一起使用的依赖注入(DI)框架。我前段时间创建了一个名为AntidoteJS的库,就是这样做的。您不需要使用它,但它显示了您如何完成它。只需看看the source。
这是快速而又脏的东西。我没有测试过它,但它显示了基本的想法:
import { inject } from "antidotejs"
export class MyComponent extends React.Component {
@inject("StateSerializer")
serializer
constuctor(props, children) {
super(props, children);
this.serializer.load(props.id);
}
setState(newState) {
super.setState(newState);
this.serializer.save(newState);
}
}