我有一个组件,它是另一个组件的“基础”。我想向新创建的组件添加更多功能
<SomeComponent
onSelect = { this.props.handleSelect }
onDeselect = { this.props.handleDeselect }
selectionList = { valuesList }
value = { values }
origin = "XYZ" />
onSelect
触发动作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
}
我将如何从
"a"
中的props
映射到component
中的value_select()
。我需要XYZ
所在的地方...请注意,我无法将任何内容写入
onSelect
,因此无法写入onClick
事件。我使用的是我不想更改的预先设计的component
。仅基于原始副本的components
。 最佳答案
您需要在SomeComponent
中添加另一个处理程序,并添加要传递给原始handleSelect
的prop的新参数。如果SomeComponent
来自供应商,并且您无法更改其代码,则必须将其包装
class BetterComponent extends React.Component{
handleSelect = (value) {
this.props.handleSelect(value, this.props.origin)
}
render() {
return (
<SomeComponent
...this.props
onSelect = { this.handleSelect }
/>
)
}
将新参数添加到您的句柄选择
export function handleSelect(value, origin) {
return dispatch => {
dispatch(actionCreator(HANDLE_SELECT, {
value: value,
origin: origin
}));
}
}
然后可以通过
action.payload.origin
中的value_select
访问原点当然,现在您必须呼叫
BetterComponent
而不是SomeComponent
<BetterComponent
onSelect = { this.props.handleSelect }
onDeselect = { this.props.handleDeselect }
selectionList = { valuesList }
value = { values }
origin = "XYZ" />
关于javascript - 行动中使用 Prop -> reducer ->自定义功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44173363/