javascript - 在 Redux 中将道具传递给动作创建者
问题描述
我正在尝试将 ID 号(作为道具)传递到onClick
事件的动作创建函数中。我之前在使用时使用过这种语法,setState()
但它似乎在这里不起作用。我是 redux 的新手,在文档中找不到答案。我已经 console.logged 确认所有必要的道具都被适当地传递了。
当我console.log(action.payload)
在我的减速器函数中时,它返回为undefined
. 如果您希望我发布更多代码,我可以。
我很关心addCard
const mapDispatchToProps = dispatch => ({
addMarket: () => dispatch(actions.addMarket()),
addCard: () => dispatch(actions.addCard())
});
具有onClick
const MarketDisplay = (props) => (
<div className="marketBox">
<h3>{props.totalMarkets}</h3>
<h3>Market ID:</h3> <p>Market</p>
<h3>Location:</h3> <p>Location</p>
<h3>Cards:</h3> <p>Cards</p>
<h3>% of total:</h3> <p>% of total</p>
<button onClick={() => props.addCard(props.id)}>Add Card</button>
</div>
);
动作对象
import * as types from '../constants/actionTypes'
export const addCard = (marketId) => ({
type: types.ADD_CARD,
payload: marketId,
}
);
解决方案
您应该将 id 转发(或代理)给操作创建者
const mapDispatchToProps = dispatch => ({
addMarket: () => dispatch(actions.addMarket()),
addCard: (id) => dispatch(actions.addCard(id)) // <-- pass id to action creator
});
UI,现在通过props.id
将起作用。
onClick={() => props.addCard(props.id)}
有趣的事实:您可能不需要 mapDispatchToProps 函数
redux connect
HOC 将自动将操作包装在mapDispatchToProps
对 的调用中dispatch
,因此您可以编写mapDispatchToProps
如下所示的
const mapDispatchToProps = {
addMarket: actions.addMarket,
addCard: actions.addCard
};
并且由于 的函数签名addCard
已经采用了 id
export const addCard = (marketId) => ({
type: types.ADD_CARD,
payload: marketId,
});
那么您的onClick
代码仍将按预期工作。
推荐阅读
- angular - 如何使用 ngx-leaflet.markercluster 自定义标记集群
- c++ - 在这个概念中:[注意](如果你使用'-fpermissive' G++ 将接受你的代码)是什么意思?
- java - 编写代码将“1 1/2”的字符串值转换为Double 1.5
- javascript - 拆分幻灯片兄弟姐妹,一个兄弟姐妹在悬停时影响另一个
- android - Kotlin:在后台加载/初始化下一个活动
- flutter - 如何避免android中的系统栏,颤振?
- python-3.x - 如何在 PyCharm 中安装 tweepy 时修复环境错误
- c# - 更改键类型字符串字典和 int 值列表中的键值
- c++ - 如何从 JSON 的特定数据块中获取数据
- flutter - 如何显示一个容器 3 秒