- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我观看了有关 Redux 的 Egghead.io 教程,感觉我对 Redux 试图做什么有所了解,但它的实际工作方式对我来说仍然很神秘。我使用react-redux connect方法实现了Dan的简单计数器应用程序,但我并不真正理解我的实现。我尝试过两种可能的方法:
不传递调度:
const mapDispatchToProps = {
upIt: () => {
return ({type:'INCREMENT'}
)
},
downIt: () => {
return({type:'DECREMENT'})
}
}
传递调度:
const mapDispatchToProps = dispatch => ({
upIt: () => {
dispatch({type:'INCREMENT'}
)
},
downIt: () => {
dispatch({type:'DECREMENT'})
}
})
计数器使用这两个选项之一来工作,但我不确定第一个选项(我从不调用“dispatch”)如何设法连接到 store.dispatch 方法。有什么理由让我更喜欢一种编写方法的方式而不是另一种?
最佳答案
将 mapDispatchToProps
视为传递相关 action creators 的接口(interface)到您的组件(这些 Action 创建者出现在您的组件上,并在您的组件中作为 Prop 进行访问)。
Action 创建者与 Action 不同。
在 Redux 中,action 只是一个简单的 JavaScript 对象,如下所示(它可以具有您想要的任何属性,但必须包含 type
属性):
{ type: 'INCREMENT' }
这些操作被发送到reducer,它处理如何根据操作属性更新状态。
Action 创建者是一个函数,在调用时将这些 Action 发送到 reducer 。
因此,在您的示例中,upIt
和 downIt
是操作创建者,而 {type:'INCRMENT'}
和 {type:'DECRMENT'}
是操作。
以upIt
为例:
upIt: () => {
return ( {type:'INCREMENT'} )
}
react-redux
中的 connect()
函数将拦截从此 action 创建者 函数返回的 action ,并将其分派(dispatch)到 redux 存储(然后由 reducer 处理)。
connect
函数实现:
connect(mapStateToProps, mapDispatchToProps)(ComponentName)
但是,请考虑您可能希望从单个操作创建者分派(dispatch)多个操作的情况。当函数只能返回
一次值时,这怎么可能?
这就是 mapDispatchToProps
的 dispatch
参数发挥作用的地方!它允许您从单个操作创建者分派(dispatch)多个操作。
例如,假设您想在 UI 中创建一个按钮来递增计数器,然后 5 秒后再次递减计数器。在 mapDispatchToProps
中定义的 action 创建者 可能如下所示:
const mapDispatchToProps = dispatch => ({
incrementForFiveSeconds: () => {
dispatch( {type:'INCREMENT'} );
setTimeout(() => {
dispatch( {type:'DECREMENT'} );
}, 5000);
},
// other action creators
})
注意我们如何在同一个 Action 创建器中调用 dispatch
函数两次!
总结一下:
return
或dispatch()
接口(interface)。dispatch()
接口(interface)。关于reactjs - mapDispatchToProps 在react-redux 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169566/
在学习 React-Redux 时,我偶然发现了以下代码,我不确定以下两行和使用 mapDispatchToProps 之间有什么区别? let { dispatch, actions } =
我有: const mapDispatchToProps = dispatch => ( { slipsRadioClickHandler: (value) => { disp
Error: Actions must be plain objects. Use custom middleware for async actions. 我试图在 mapDispatchToPro
我想对 mapDispatchToProps 使用速记符号,但是当我替换老式的 bindActionCreators 策略时 function mapDispatchToProps(dispatch:
假设一个无状态的功能性 UserProfile 组件显示给定 url 的用户数据。假设它被 connect(mapStateToProps, mapDispatchToProps)(UserProfi
在我的index.js中addCoin行动正在发挥作用。 import { addCoin } from './reducer/portfolio/actions' const element = d
我是 redux 的新手,遇到了 mapDispatchToProps 的问题, 我的 react 应用程序中有一个具有不同 div 的组件,每次用户单击 div 时,它都应该通过参数更改所选颜色,然
我有一个看似微不足道的问题,但我一生都无法弄清楚。 FooContainer.tsx ... public render() { ... this.props.onSubmit(123) //
这个问题已经有答案了: What is mapDispatchToProps? (6 个回答) 已关闭 4 年前。 mapStateToProps 之间有什么区别 和 mapDispatchToPro
我已经使用 redux 编写了一个容器组件,我的 mapDispatchToProps 实现如下所示 const mapDispatchToProps = (dispatch, ownProps) =
我对 mapDispatchToProps 有疑问。如何使用按钮中的 onClick 从 mapDispatchToProps “触发”操作? - 登录表单.js。我知道,我还有很多东西要学 :D c
我希望能够在发送参数的同时访问 mapDispatchToProps 中的事件对象。你如何看待这件事? 这是我目前所拥有的: const mapDispatchToProps = dispatch =
父组件 const myParentComponent = ({ sourceValue, classes, doStuff }) => { return (
人们似乎总是在他们需要的每个组件的底部定义这些函数,这是有原因的吗? 当我创建一个 react/redux 项目时,我将它们放在 /mappingFunctions 目录中,然后将它们导入到我需要它们
我不明白的是,在这个柯里化(Currying)风格声明中,为什么调度输入是第二个? connect 不是以 dispatch 作为输入调用这个函数,然后将返回值赋给 props 吗?所以返回值应该是获
我很难理解 mapDispatchToProps 这里使用了一个 mapDispatchToProps 函数 const mapDispatchToProps = () => { return {
我能看懂下面的示例代码: const mapStateToProps = state => { return { todo: state.todos[0] } } const mapD
我正在将 React 与 Redux 结合使用并遵循教程,但我终究无法找出这个错误。 Uncaught TypeError: this.props.fetchPosts is not a functi
请告诉我,为什么当我调用 this.props.getOnEvents() 时,会出现“getOnEvents() is not a function”的错误,这里出了什么问题,如何修复?我正在查看c
所以我的应用程序中有这个简化的结构: 在组件中我有: handlePageClick(data) { this.props.onChangePage(data.selected
我是一名优秀的程序员,十分优秀!