【发布时间】:2018-11-06 07:07:13
【问题描述】:
我在从我在 Redux 中设置的 Express 服务器的 fetch 调用中将数组返回到我的 React 组件时遇到问题。
我试图从 Express 的这个 json 中返回维生素数组:
router.get('/', function(req, res, next) {
vitamins: [
{
name: "Vitamin B2"
}
],
minerals: [
{
name: "Zinc"
}
]});
});
这是我的 actions.js 中的 fetch 调用和 FETCH_VITAMINS_SUCCESS 操作。
export function fetchVitamins() {
return dispatch => {
return fetch("/users")
.then(res => res.json())
.then(micros => {
dispatch(fetchVitaminsSuccess(micros.vitamins));
return micros.vitamins;
})
};
}
export const FETCH_VITAMINS_SUCCESS = 'FETCH_VITAMINS_SUCCESS';
export const fetchVitaminsSuccess = vitamins => ({
type: FETCH_VITAMINS_SUCCESS,
payload: { vitamins }
});
这是我的 reducers.js,我试图将状态设置为“micros.vitamins”。
const initialState = {
micros: [],
};
function vitaminReducer(state = initialState, action) {
switch(action.type) {
case FETCH_VITAMINS_SUCCESS:
return {
...state.vitamins,
micros: action.payload
};
default:
return state;
}
}
这是我的 React 组件 Vitamins.js,我在其中导入 fetchVitamins() 并尝试将每种维生素的名称传递给选项标签中的菜单下拉菜单。
componentDidMount() {
this.props.fetchVitamins();
}
renderData() {
const { vitamins } = this.state.micros;
return vitamins.map((micro, index) => {
return (
<option value={micro.value} key={index}>{micro.name}</option>
)
})
}
render() {
return (
<select value={this.props.value}>
{this.renderData()}
</select>
)
}
const mapStateToProps = state => ({
micros: state.vitamins,
});
export default connect(mapStateToProps, { fetchVitamins })(Vitamins);
现在我得到了错误“TypeError: Cannot read property 'micros' of null”,突出显示了我的 renderData() 函数。
【问题讨论】:
-
你的意思是
this.props.micros对吗?this.state指的是组件状态。这就是为什么该函数被称为“将状态映射到 PROPS” -
顺便说一句.. 你的 express 函数,
router.get调用。您发布的代码与您的路线完全一样吗?还是您缺少一些代码 -
好的,谢谢。我现在收到错误
TypeError: Cannot read property 'vitamins' of undefined。router.get代码就在那里,我只是没有在顶部包含路由器和快速呼叫。 fetch 调用有效,我已经测试过了。
标签: json reactjs redux fetch redux-thunk