为什么在使用redux和react.js时我的道具为undefined?
我试图向我的应用程序添加一个状态,该状态仅在某些事件过去后才保存一个布尔值。我无法弄清楚我在做什么错。
import * as actionTypes from '../constants/action-types.js';const initialState = [{
eventPassed: false
}];
export default function eventPassed(state = initialState, action) {
switch (action.type) {
case actionTypes.EVENT_PASSED:
return true;
default:
return state;
}
}
import * as actionTypes from '../constants/action-types';export function eventPassed(eventPassed) {
return {
type: actionTypes.EVENT_PASSED,
payload: { eventPassed: eventPassed }
};
}
import React, { Component } from 'react';import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import Example from '../components/example.jsx';
import { eventPassed } from '../actions/app-actions';
class ExampleContainer extends Component {
render() {
return (
<Example {...this.props} />
);
}
}
const mapDispatchToProps = (dispatch) => ({
actions: bindActionCreators({
eventPassed
}, dispatch)
});
const mapStateToProps = (state) => ({
eventPassed: state.eventPassed
});
export default connect(mapStateToProps, mapDispatchToProps)(ExampleContainer);
import React, { Component, PropTypes } from 'react';class Example extends Component {
constructor() {
super();
this.action = this.action.bind(this);
}
componentDidMount() {
this.props.actions.eventPassed(true);
}
action() {
console.log(this.props.eventPassed);
}
render() {
return (
<div>
<button onClick={this.action}>Action</button>
</div>
);
}
}
export default Example;
当我尝试在组件中记录 时, 它给了我“
”。缺少什么吗?这似乎是redux中存储最简单的用法。
回答:
回答:
eventPassed
您正在尝试访问的动作函数()在处不存在。它实际上仅存在于 。
这是因为您将action方法绑定到mapDispatchToProps中的值“
”。依次提供了
eventPassed
通过提供访问操作的权限this.props.actions
。由于this.props.actions指向
eventPassed
,因此通过尝试访问,
this.props.actions.eventPassed
您正在尝试访问action上的’eventPassed’属性eventPassed
。结果是,当您登录此属性时,您会收到“”
其他必要的修正:
具有块体的箭头功能
,因此必须定义 。因此,您的函数需要如下所示:
mapDispatchToProps = (dispatch) => { return { actions: bindActionCreators(eventPassed, dispatch) }
}
const initialState = [{ eventPassed: false
}];
由于您稍后尝试将其引用为an,object { eventPassed: true}
而不是对象数组,[ { eventPassed: true }
]因此应为:
const initialState = { eventPassed: false
};
export default function eventPassed(state = initialState, action) { switch (action.type) {
case actionTypes.EVENT_PASSED:
return {
...state,
eventPassed: action.payload
};
default:
return state;
}
}
您最初要做的是返回一个不再是对象(或在原始情况下是对象数组)的状态,而只是 true
以上是 为什么在使用redux和react.js时我的道具为undefined? 的全部内容, 来源链接: utcz.com/qa/407177.html