Redux 状态不会传播到组件

Redux state wont propagate to component

我一直在尝试使用 Reacts 组件功能制作组件。在这种情况下,我对 componentDidMount 特别感兴趣。

但是,无论我尝试什么,我的状态都不会传播到组件。

组件如下:

class MainPage extends React.Component
{
    componentDidMount() {
        this.props.actions.requestPosts();
    }
    render() {
        return(
            <div className="main-page">
                <PreviewList posts={this.props.posts}/>
            </div>
        );
    }
}

const mapStateToProps = state => ({
    posts: state.main_posts,
    errors: state.main_errors
});

const mapDispatchToProps = dispatch => {
    return {
        actions: {
            requestPosts: () => dispatch(requestPosts())
        }
    }
};

export default connect(mapStateToProps, mapDispatchToProps)(MainPage);

减速器:

export default (state = {main_posts: [], main_errors: []}, action) => {
    switch(action.type) {
        case USER_REQUESTS_POSTS_SUCCEEDED:
            return Object.assign({}, state, {
                main_posts: action.posts
            });
        case USER_REQUESTS_POSTS_FAILED:
            return Object.assign({}, state, {
                main_errors: action.errors
            });
        default:
            return state;
    }
};

为了简单起见,我没有包含导入语句。我使用 redux-thunk。我已经测试了这些动作,它们成功地到达了减速器。新状态创建成功并返回。然而,它根本没有到达所需的组件。

我已经尝试研究,但我只找到了改变状态的 reducer 的例子,但我看不到任何我改变状态的地方。我究竟做错了什么? (具有讽刺意味的是,该代码与我其他运行良好的 React 应用程序相似)。

如果有帮助,这是我的店铺:

export const history = createHistory();

const middleware = [
    thunk,
    routerMiddleware(history)
];

const reducers = {
    main: mainReducer,
    router: routerReducer
};

const store = createStore(
    combineReducers(reducers),
    {},
    applyMiddleware(...middleware)  
);

export default store;

编辑:根据要求,这是我的操作:

export const USER_REQUESTS_POSTS_SUCCEEDED = 'user/REQUESTS/POSTS/SUCCESS';
export const USER_REQUESTS_POSTS_FAILED = 'user/REQUESTS/POSTS/FAILURE';

export const requestPosts = () => {
    return function(dispatch) {
        return fetchPosts().then(
            posts => dispatch(requestPostsSucceeded(posts)),
            errors => dispatch(requestPostsFailed(errors))
        );
    };
};

function fetchPosts() {
    return Promise.resolve([{title: 'Test Post', content_short: 'Hello World', author: 'Extremo', category: 'development', tags: ['test'], date: '15.11.17'}]);
}

export const requestPostsSucceeded = (posts) => {
    return {type: USER_REQUESTS_POSTS_SUCCEEDED, posts: posts};
};

export const requestPostsFailed = (errors) => {
    return {type: USER_REQUESTS_POSTS_FAILED, errors: errors};
};

您的 mapStateToProps 函数应该是:

function mapStateToProps(state) {
  return {
    posts: state.main.main_posts,
    errors: state.main.main_errors
  }
}

您目前undefined

传递帖子和错误

来自商店定义

const reducers = {
    main: mainReducer,
    router: routerReducer
};

您应该使用 component reducer's key

访问您的组件状态

也就是 main.

const mapStateToProps = state => ({
    posts: state.main.main_posts,
    errors: state.main.main_errors
});