Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs action creator功能是否应仅更改一个字段?_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs action creator功能是否应仅更改一个字段?

Reactjs action creator功能是否应仅更改一个字段?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我正在学习redux,在完成todos教程之后,我有点困惑。在本教程中,他们展示了一个非常小的todo列表示例,其中一个字段是todo的文本,另一个字段可能与不同的操作配对 { text: "todo item", completed: false } 例如,其行为定义为: ADD_TODO: 'ADD_TODO' TOGGLE_TODO = 'TOGGLE_TODO' 这是有道理的,但是你会如何构建一个大对象,比如一个充满应用程序设置的对象呢?我应该为每个设置名称创建一个操

我正在学习redux,在完成todos教程之后,我有点困惑。在本教程中,他们展示了一个非常小的todo列表示例,其中一个字段是todo的文本,另一个字段可能与不同的操作配对

{
    text: "todo item",
    completed: false
}
例如,其行为定义为:

ADD_TODO: 'ADD_TODO'
TOGGLE_TODO = 'TOGGLE_TODO'
这是有道理的,但是你会如何构建一个大对象,比如一个充满应用程序设置的对象呢?我应该为每个设置名称创建一个操作吗

{
    fooSetting: "foostuffs",
    barSetting: "barstuffs",
    fooWithChild: {
        fochild: "foochild",
        fooChild2: "there are an arbitrary number of settings"
    }
    ... with an arbitrary number of additional settings. 
}

您将如何使用这种任意大小的结构为json创建操作和操作创建者?

对于粒度操作和减缩器的定义没有单一的规则。如果你想的话,你可以随意让它们更通用

举个例子:如果我有一个输入姓名和地址的表单,我可以有像SET_USER_FIRST_name、SET_USER_LAST_name、SET_USER_CITY等操作。但是,对每个字段都有不同的操作可能并没有多大实际好处。相反,您可能有一个更新用户表单操作


您甚至可以在减速机中执行类似于返回{…state,…action.payload}的操作,尽管我试图限制这样做的频率,只是因为它没有提供实际更新哪些字段的信息。

action creator函数不会更改任何内容,而是创建操作。如果你问一个减速机是否应该只更改一个字段,那么不,他们应该更改他们需要更改的任何内容。我最终弄明白了这一点,但它有点复杂,因为我嵌套了几个级别,这开始理解为什么文档警告不要嵌套,尽管它非常方便。是的,正如你所看到的,建议的方法是扁平化您的数据结构,或者使用更多的reducer composition将更新每一级数据的工作委托给更小的函数,以使事情更简单。如果可能,您能否链接到reducer composition的示例以避免冗长的嵌套逻辑?感谢阅读Redux文档中的部分,特别是、、和部分。