Javascript 减少React Redux状态和调度样板
我通常使用以下模式构建组件:Javascript 减少React Redux状态和调度样板,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我通常使用以下模式构建组件: import selectors from '../store/selectors' import someAction1 from '../actions/someAction1' import someAction2 from '../actions/someAction2' import someAction3 from '../actions/someAction3' class MyComponent extends React.Component {
import selectors from '../store/selectors'
import someAction1 from '../actions/someAction1'
import someAction2 from '../actions/someAction2'
import someAction3 from '../actions/someAction3'
class MyComponent extends React.Component {
render() => {
return <Fragment>
<div>{this.props.someReduxProperty1}</div>
<div>{this.props.someReduxProperty2}</div>
<div>{this.props.someReduxProperty3}</div>
<a onClick={this.props.someAction1}>Action1</a>
<a onClick={this.props.someAction2}>Action2</a>
<a onClick={this.props.someAction3}>Action3</a>
</Fragment>
}
}
export default connect(
(state, ownProps) => {
return {
someReduxProperty1: selectors.getSomeReduxProperty1(state),
someReduxProperty2: selectors.getSomeReduxProperty2(state),
someReduxProperty3: selectors.getSomeReduxProperty3(state)
}
},
(dispatch) => {
return {
someAction1: () => {
dispatch(someAction1())
},
someAction2: () => {
dispatch(someAction2())
},
someAction3: () => {
dispatch(someAction3())
}
}
}
)(MyComponent)
代码中只有最少的变量名重复。另外一个好处是,由于每个组件的连接调用都是相同的,因此我可以连接一个助手,并进一步缩短我的组件:
export default connectHelper = (componentClass) => {
return connect((state) => {
return { state: state }
})(componentClass)
}
仅仅通过浏览connect调用,我就无法一目了然地看到我的Redux商店使用了哪些属性。我同意这一点
因此,我的问题是:
如果基本上绕过mapStatetoProps,我还会牺牲其他考虑因素吗?我所担心的一个问题是,由于只有一个状态属性,所以每当Redux存储区中的任何属性发生更改时,React可能会过度地重新呈现每个组件。这就是为什么需要在MapStateTops中手动映射属性的原因吗
跳过mapDispatchToProps并使用默认的this.props.dispatch,我会损失什么?我必须做额外的工作,直接在mapDispatchToProps中绘制各州地图;我的努力能得到什么
在React+Redux设置中是否有其他代码组织/模式可以帮助减少组件属性混乱
谢谢!只是让我的头缠在这些工具上。这是一个有趣的练习,但有些事情感觉有点奇怪 是的,有很多方法可以缩短这个时间 首先,您应该使用: 常量映射分派={ 一些行动1, 一些行动2, 一些行动3, }; 第二,虽然我们没有mapState的对象速记等价物,但您可以使用重选来做同样的事情 是的,如果您传递整个状态值,您的组件现在将在每次更新Redux存储时重新呈现,这是基于mapState函数返回的值
第三,考虑在你的组件开始使用破坏来拔出他们需要的特定道具,所以你不会重复这个。道具。每一行。这可以是类组件的呈现方法中的对象分解,也可以是函数组件的函数参数分解
最后,虽然没有具体的反应,但请查看我们的新产品。它包括用于简化几个常见Redux用例的实用程序,包括存储设置、定义缩减器、不可变更新逻辑、检查意外突变,甚至自动创建整个状态片,而无需手动编写任何动作类型或动作创建者。是的,有很多方法可以缩短此过程 首先,您应该使用: 常量映射分派={ 一些行动1, 一些行动2, 一些行动3, }; 第二,虽然我们没有mapState的对象速记等价物,但您可以使用重选来做同样的事情 是的,如果您传递整个状态值,您的组件现在将在每次更新Redux存储时重新呈现,这是基于mapState函数返回的值
第三,考虑在你的组件开始使用破坏来拔出他们需要的特定道具,所以你不会重复这个。道具。每一行。这可以是类组件的呈现方法中的对象分解,也可以是函数组件的函数参数分解
最后,虽然没有具体的反应,但请查看我们的新产品。它包括简化几个常见Redux用例的实用程序,包括存储设置、定义缩减器、不可变更新逻辑、检查意外突变,甚至自动创建整个状态片,而无需手动编写任何动作类型或动作创建者。哇,谢谢,马克!在这些链接中有很多信息,谢谢你发布它们!这非常有用!当然你可能也对我的作品感兴趣。哇,谢谢,马克!在这些链接中有很多信息,谢谢你发布它们!这非常有用!当然你可能也对我的工作感兴趣,也对我的工作感兴趣。
export default connectHelper = (componentClass) => {
return connect((state) => {
return { state: state }
})(componentClass)
}
class MyComponent extends React.Component {
...
}
export default connectHelper(MyComponent)