【发布时间】:2016-05-23 21:13:23
【问题描述】:
那么我怎样才能拥有一个从父级获取一些默认道具的组件,同时也有一个商店?这些似乎有冲突。
<Mycomponent foo="bar">
...这意味着我的组件有一些名为“foo”的状态/道具,其值是我的商店不知道的。这不会破坏图案的可见性设计吗?我是否需要通过其中一种反应生命周期方法将这些初始道具传递到我的商店?这似乎是额外的工作,也很脆弱。
我还发现将商店的状态映射到组件 props 对象有点令人沮丧。例如,我有一个包含一些字段的表单,它们可以从父级获取默认值
<MyForm input1="red", input2="blue">
商店的初始状态可能如下所示
{
status: valid,
modified: false,
form: {
input1: ""
input2: ""
}
}
而我在渲染组件之前的本地 props 是这样的
{
input1: "red"
input2: "blue"
}
但是当事情在 mapStateToProps 中重新映射时...
var mapStateToProps = function(state) {
return state;
}
它最终看起来像这样。
{
form: {
input1: "red"
input2: "blue"
}
status: valid,
modified: false,
input1: "red"
input2: "blue"
}
因为“表单”对象之外的 key1 和 key2 属性来自父级传递下来的初始组件属性。它们不是商店状态对象的一部分。我真的希望道具对象与商店相匹配,但除非我开始删除东西,否则它似乎不能。似乎我们以两种方式使用 this.props 对象,感觉不正确。
我真正想要的是父级的属性直接进入我的商店,然后我希望我的组件仅基于我的商店呈现。我觉得 react-redux 不适合 react 生命周期,或者至少我不明白它应该如何使用。
【问题讨论】:
-
我最终恢复到不使用 react-redux 模块,我觉得它可能比实际更理想化。我相信组件应该能够拥有他们控制的私有状态,作为开发人员可以轻松/快速地操作。为每一个微小的变化创建 reducer 和 action 都是一种负担。此外,没有明确地将 props 与父组件与 store 分开是令人困惑的。
标签: react-redux