无法访问 react-redux 中对象内的嵌套数组
2020-02-28
472
您好,我是 redux 新手,正在努力解决一个问题。我正在尝试访问并映射我帖子数组内的评论。但是,我不确定该怎么做。到目前为止,我已尝试更改操作和 Reducer 以解决此问题。我认为问题出在 React 和 Redux 中。我无法判断我的 mapStateToProps 是否正常工作。此外,状态是从我的快递服务器中获取的,它似乎工作正常,正如您在图片中看到的那样。
我的 getPost 操作:
export const getPost = (group_id, post_id) => async dispatch => {
try {
const res = await axios.get(`/api/groups/${group_id}/${post_id}`);
dispatch({
type: GET_POST,
payload: res.data
});
} catch (error) {
dispatch({
type: POST_ERROR,
payload: { msg: error.response.statusText, status: error.response.status }
});
}
};
初始状态:
const initialState = {
groups: [],
group: [],
loading: true,
error: {}
};
reducer:
case GET_POST:
return {
...state,
post: payload,
loading: false
};
我试图映射评论的位置:
import React, { Fragment, useEffect } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { getPost } from '../../../redux/actions/group';
const Post = ({ getPost, post, match }) => {
useEffect(() => {
getPost(match.params.group_id, match.params.post_id);
}, [getPost, match.params.group_id, match.params.post_id]);
// I want to map over the comments here
return (
{post.comments.map(comment => ({ comment }))}
);
};
Post.propTypes = {
getPost: PropTypes.func.isRequired,
group: PropTypes.object.isRequired
};
const mapStateToProps = state => ({
post: state.post
});
export default connect(mapStateToProps, { getPost })(Post);
1个回答
您可以使用 redux 的一些技巧来访问嵌套对象,我们已经在 prod 环境中使用这种方法一段时间了。
首先是 Reducer(您可以使这个 Reducer 更加复杂)
const LocalStorageReducer = createReducer<Store['localStorage']>(
new LocalStorage(),
{
saveLocalStorageItem(state: LocalStorage, action: any) {
return {...state, [action.payload.item]: action.payload.value}; // <= here
},
}
);
对于 Actions
export const actions = {
saveLocalStorageItem: (payload: InputAction) => ({type: 'saveLocalStorageItem', payload}),
};
对于类型
InputAction
export class InputAction {
item: string;
value: string | Array<string> | null | boolean;
constructor() {
this.item = '';
this.value = null;
}
}
对于组件中的处理程序
this.props.saveLocalStorage({ item: 'loading', value: false });
通过这种方式,您可以通过一种方式访问嵌套的 redux 存储。
对于复杂(4-5 级)和多重(> 2 次)数据结构,还有其他方法,但在大多数情况下,它已经足够好了。
keikai
2020-02-28