gpt4 book ai didi

javascript - 类型错误 : Cannot read property 'map' of undefined in react-redux

转载 作者:行者123 更新时间:2023-12-03 07:03:02 24 4
gpt4 key购买 nike

我是 React 和 Redux 的新手,仍然有点困惑。

我的目标是使用 GET 请求在 HTML 中呈现一堆 json 数据。我正在使用 react 和 redux 来管理对象的状态,但我相信我的问题是数据甚至不存在

所以基本上每当有人请求一个 URL/courses 时,他/她都会在 json 中看到一堆数据。

我在组件中收到错误

TypeError: Cannot read property 'map' of undefined



这是代码

行动
export function getCourses() {
return (dispatch) => {

return fetch('/courses', {
method: 'get',
headers: { 'Content-Type', 'application/json' },
}).then((response) => {
if (response.ok) {
return response.json().then((json) => {
dispatch({
type: 'GET_COURSES',
courses: json.courses
});
})
}
});
}
}

reducer
export default function course(state={}, action) {

switch (action.type) {
case 'GET_COURSES':
return Object.assign({}, state, {
courses: action.courses
})
default:
return state;
}


}

零件
import React from 'react';
import { Link } from 'react-router';
import { connect } from 'react-redux';


class Course extends React.Component {



allCourses() {
return this.props.courses.map((course) => {
return(
<li>{ course.name }</li>
);

});
}

render() {
return (
<div>
<ul>
{ this.allCourses() }
</ul>

</div>
)
}
}

const mapStateToProps = (state) => {
return {
courses: state.courses
}
}

export default connect(mapStateToProps)(Course);

索引缩减器,我将所有内容组合在一起
import { combineReducers } from 'redux';
import course from './course';

export default combineReducers({
course,
});

配置 Store ,我存储初始状态和 reducer
import { applyMiddleware, compose, createStore } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from '../reducers';

export default function configureStore(initialState) {
const store = createStore(
rootReducer,
initialState,
compose(
applyMiddleware(thunk),
typeof window == 'object' && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : f => f
)
);

return store;
}

我相信为什么数据不存在是因为我没有采取行动?任何帮助,将不胜感激。

最佳答案

mapStateToProps将根状态作为参数(您的索引缩减器,它也是根缩减器),而不是您的 course reducer 。据我所知,这是您商店的结构:

-index <- This is the root reducer
-course

因此,要从该状态获取类(class),请在您的组件中:
// state is the state of the root reducer
const mapStateToProps = (state) => {
return {
courses: state.course.courses
}
}

此外,您可以考虑初始化 course 的状态。 reducer 具有一个空的类(class)数组,因此如果您必须在触发操作之前渲染组件,您将不会收到错误消息。
const initialState = {
courses: []
};

export default function course(state= initialState, action) {

...

}

最后,您根本没有触发该操作,因此您将永远不会真正获得类(class),我假设您希望在 Course 之后检索它们组件已加载,为此您可以使用 componentDidMount组件中的事件。

首先,您需要将 Action 映射到组件的属性
// Make sure you import the action
import { getCourses } from './pathToAction';

...

const mapDispatchToProps = (dispatch) => {
return {
onGetCourses: () => dispatch(getCourses())
};
}

// Connect also with the dispatcher
export default connect(masStateToProps, mapDispatchToProps)(Course);

现在调用 onGetCourses组件挂载时的属性
class Course extends React.Component {

componentDidMount() {
this.props.onGetCourses();
}

...

}

关于javascript - 类型错误 : Cannot read property 'map' of undefined in react-redux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38681265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com