Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 需要帮助设计Redux应用程序(减少所需操作的数量)_Reactjs_React Native_React Redux - Fatal编程技术网

Reactjs 需要帮助设计Redux应用程序(减少所需操作的数量)

Reactjs 需要帮助设计Redux应用程序(减少所需操作的数量),reactjs,react-native,react-redux,Reactjs,React Native,React Redux,我是redux am的新手,目前正处于应用程序的设计阶段。我希望有人能告诉我,我提出的方法是否好(或者在这方面是否有效),或者是否有更好的方法来完成我正在尝试的事情 主要问题是我有 具有多个具有相同结构的对象的应用程序。对于这些对象中的每一个,我将 希望能够执行更新。如果我可以避免为每个人写一个动作,那就太好了 更新,而不是权利更一般的更新 下面是我所在州的一个例子 initialState = { commonPumpItems: [

我是redux am的新手,目前正处于应用程序的设计阶段。我希望有人能告诉我,我提出的方法是否好(或者在这方面是否有效),或者是否有更好的方法来完成我正在尝试的事情

主要问题是我有 具有多个具有相同结构的对象的应用程序。对于这些对象中的每一个,我将 希望能够执行更新。如果我可以避免为每个人写一个动作,那就太好了 更新,而不是权利更一般的更新

下面是我所在州的一个例子

initialState = {
   commonPumpItems:      
        [
            basalRate: {units: ml/hr, activeValue: 125.0, minValue: 3, maxValue: 4}, 
            doseVolume: {units: ml/hr, activeValue: 125.0, minValue:3, maxValue: 4},
            doseRate: {units: ml/hr, activeValue: 135.9, minValue: 5, maxValue: 10},
            ...(about 10 more of these)
        ],
    kvoRate: {status: true, minValue: 0, maxValue: 1}
}
commonPumpItems是具有单位、activeValue、minValue和maxValue的对象。 我想避免写一堵墙的行为,比如

updateBasalRateValue()
updatedoseVolumeValue()
updatedoseRateValue()
updateBasalRateUnits()
etc
我如何构造我的动作创造者和还原者,这样我就有了一些一般的动作,比如

updateCommonPumpItem(name, propertyToUpdate, newValue)
这样就可以称之为

updateCommonPumpItem(basalRate, units, ml)
我的想法是有这样的东西

def updateCommonPumpItem(name, propToUpdate, newValue){
    return {type: "update", name, propToUpdate, newValue}
}



Then in Reducer.js have something like this

function reducer(state = initialState, action){
     switch (action.type){

           case update: 
               state.commonPumpItems.map( (pumpObject) => {
                     if (pumpObject.name === action.name){
                        return Object.assign{{}, pumpObject, {action.propToUpdate: action.newValue}
                     }
                     else{
                        return pumpObject
                         }
           ..... bunch of other stuff

我意识到没有必要把事情弄得这么复杂。我可以将它们作为属性存储在对象中,而不是将它们存储在数组中。这是一种更好的方法,因为它消除了在my reducer中搜索特定项的需要。

所有操作都是对象。它们是如何创建的完全取决于您——只需编写一个函数即可。@DaveNewton用一个更具体的例子更新了这篇文章,说明了我的想法。以这种方式存储commonPumpItems对我来说有意义吗?然后每次我想要更新时,都必须循环遍历它们以找到我想要更新的那个?有没有更好的方法这就是动作创作者的目的。你要传入对象和类似的东西,然后说出它是什么类型的对象,动作创建者就会像工厂一样,返回一个函数(或动作)来匹配你需要的。