![](/img/trans.png)
[英]React/Redux: is it okay to access action payload in mapDispatchToProps?
[英]Pass variable to action in mapDispatchToProps
import React from "react"
import {connect} from "react-redux"
import {increment} from "./redux"
function App(props) {
return (
<div>
<h1>{props.count}</h1>
<button onClick={()=>props.handleClick(5)}>+</button>
</div>
)
let mapDispatchToProps=(dispatch)=>
{
handleClick:(who)=>dispatch({
type: "INCREMENT",
count:who
})
}
}
export default connect(state => ({count: state}),mapDispatchToProps)(App)
import redux, {createStore} from "redux"
export function increment(count) {
return {
type: "INCREMENT",
count
}
}
export function decrement() {
return {
type: "DECREMENT"
}
}
function reducer(count = 0, action) {
switch(action.type) {
case "INCREMENT":
return count + 1
case "DECREMENT":
return count - 1
default:
return count
}
}
const store = createStore(reducer)
store.subscribe(() => console.log(store.getState()))
export default store
发现错误:ReferenceError:未定义 mapDispatchToProps (/App.js:25)
我该如何解决这个问题? 我对此很困惑.....我需要根据传递的值增加值,请帮助我解决这个问题。
问题是您将 mapDispatchToProps function 包装在 App 组件中。
function App(props) {
return (
<div>
<h1>{props.count}</h1>
<button onClick={()=>props.handleClick(5)}>+</button>
</div>
)
}
let mapDispatchToProps=(dispatch)=>
({
handleClick:(who)=>dispatch(increment(who))
})
export default connect(state => ({count: state}),mapDispatchToProps)(App)
我对您的 function 创建器和减速器有一个建议。 据我所知,您想要增加的值取决于您的有效负载,而不仅仅是 count + 1。您可以执行以下操作。
// Increment function creator
export function increment(count) {
return {
type: 'INCREMENT',
payload: count
}
}
// Reducer
function reducer(count = 0, action) {
switch(action.type) {
case: 'INCREMENT':
return count + action.payload
case: 'DECREMENT':
return count - 1
default: return count
}
}
希望对您有所帮助,我也是新手,学习愉快。
假设我们正在使用Container Presentational Component
// container.js
import { connect } from "react-redux";
import { Login } from "../components/login/login.component";
import { loginUser } from "../modules/user/user.actions";
const toState = undefined;
const toDispatch = {
login: loginUser,
};
export default connect(toState, toDispatch)(Login);
演示组件看起来像:
export class Login extends Component {
...
onSubmit (event) {
const { login } = this.props;
const { name: pass } = this.state;
login({ name: pass });
}
...
}
loginUser 操作创建者如下所示:
export function loginUser (credentials) {
return { type: "Login/user", payload: credentials }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.