2017-05-24 24 views
0

我有建立到Select部件从Ant Designhttps://ant.design/components/select/操作内发送的元数据到减速器在终极版

<SomeComponent 
onSelect = { this.props.handleSelect } 
onDeselect = { this.props.handleDeselect } 
selectionList = { valuesList } 
value = { values }/> 

onSelect组件triggeres动作this.props.handleSelect

export function handleSelect(value) { 
    return dispatch => { 
     dispatch(actionCreator(HANDLE_SELECT, value)); 
    } 
} 

即动作进入reducer

case HANDLE_SELECT: { 
    const newValues = value_select(state, action); 
     return { 
      ...state, 
      find: { 
       ...state.a, 
       values: newValues 
      } 
     } 
} 

最后,value_select被称为做所有的魔法

export const value_select = function(state, action) { 
    ... 

    const newData = { 
    XYZ: action.payload 
    } 
    return newData 
} 

这使我想起了我的问题。 是否可以发送更多metadataaction?想象一下,我多次使用组件<SomeComponent.../>。我不知道在触发onSelect时哪个渲染组件触发了action。 如果我想在后面处理value_select = function(state, action) {...中的信息,我想知道哪个component导致action正确处理我的数据。我需要动态地将XYZ设置为value_select(),具体取决于哪个<SomeComponent.../>导致了actionaction.payload只给我value<SomeComponent.../>保存的内容,仅此而已。 有没有办法发送更多的信息onSelect或者是不好的做法,我需要每个component <SomeComponent.../>action呢?

回答

1

绝对。这是你的动作和你的减速器,你可以附加你想要的任何信息。

构建动作的最常见方法是Flux Standard Action方法,该方法期望您的动作看起来像{type, payload, meta, error},但是它确实取决于您对动作的操作。

对于其他一些想法,您可能需要阅读Redux文档的Structuring Reducers - Reusing Reducer Logic部分。

+0

感谢您的提示。你写这些完全取决于我“我把什么放在行动/减速器中”。我仍然无法摆脱困境的是,我将如何获取handleSelect(value)的附加信息,具体取决于点击的内容。这必须发生在组件的某个地方,因为我有这个组件多次。因此,组件必须提供信息并单击它(每个组件的唯一信息) – Stophface

+0

如果组件中有多个实例都试图使用相同的动作创建者,那么这些组件传递给哪些参数仍然由您决定行动创造者。例如,'onClick = {()=> handleSelect(value,someId)}'。然后,修改动作创建者以将该ID包含在动作中。 – markerikson