我有这个动作创作者:
export function getLevelsMap() {
const request = axios.get(`/api/levels`);
return {
type: GET_LEVELS_MAP,
payload: request
}
}
和这个减速机
import { GET_LEVELS_MAP } from '../actions';
export default function (state = null, action) {
switch (action.type) {
case GET_LEVELS_MAP:
return action.payload.levels;
default:
return state;
}
}
AJAX请求应该返回给我:
{
"levels": [
{
"_id": "5951b7f0600af549fb1d269a",
"name": "College",
"__v": 0,
"subjects": [
{
"_id": "594891db1dbdf635ca3019ab",
"name": "Maths",
"__v": 0
},
{
"_id": "5948920d1dbdf635ca3019ac",
"name": "Biology",
"__v": 0
}
...
请求确实有效(我用PostMan测试过)
现在,我将我的组件与reducer和action连接:
function mapStateToProps(state) {
return {
levels: state.levels
}
};
export default connect(mapStateToProps, { getLevelsMap })(ChooseSubject);
我在componentDidMount方法中获取数据(调用操作):
componentDidMount() {
if (!this.props.levels) {
this.props.getLevelsMap();
}
}
并尝试使用reducer:
getSubjects(level) {
let levels = this.props.levels;
if (levels) {
for (var item of levels) {
if (item.name === level) {
return item;
}
}
}
return null;
}
这是我说我正在使用promise中间件的地方
const createStoreWithMiddleware = applyMiddleware(promise)(createStore);
ReactDOM.render(
, document.querySelector('.root'));
但是,this.props.levels是未定义的... PS:如果我硬编码(复制粘贴我在subject_reducer中从postMan获得的结果)来自AJAX请求的答案,一切都有效 .
非常感谢您的非常感谢帮助:)