无法访问 redux 对象数组属性
2019-06-28
168
我对 react/redux 还很陌生,我遇到了一个无法理解的意外问题
我从 redux 检索了一篇特定的文章,当我加载正确的页面时,操作就会触发。我可以在 redux dev tools 中看到文章已正确加载到
state.article
中,一切正常。
Reducer(简化):
const initialState = {
article: null,
loading: true,
};
export default function(state = initialState, action) {
const { type, payload } = action;
switch (type) {
case GET_TARGET_ARTICLE:
return {
...state,
article: payload,
loading: false
};
}
操作:
export const getTargetArticle = slug => async dispatch => {
try {
const res = await axios.get("api/article/" + slug);
dispatch({
type: GET_TARGET_ARTICLE,
payload: res.data
});
} catch (err) {
...
}
};
这是 article 对象应该具有的内容:
article: {
title:"",
content: "",
comments:[],
}
问题:
正如我所说,
state.article
已正确填充,我可以访问
title
和
content
。但是当我尝试访问评论时,我得到了一个令人讨厌的
无法读取 null 的属性“评论”
。知道为什么吗?
如果有帮助的话,下面是我显示它的方式:
const Article = ({ getTargetArticle, article: { article, loading }, match }) => {
useEffect(() => {
getTargetArticle(match.params.slug);
}, []);
let commentsList = article.comments.map((comment, index) => (
<Fragment>{comment.title}</Fragment>
));
return (
<Fragment>
{article && article.title}
{commentsList}
</Fragment>
);
};
非常感谢
1个回答
初始渲染时,评论将只有空数组,因此您无法迭代它,并且评论中没有标题。因此,comment.title 是导致您出现此问题的原因。要解决此问题,请在使用 map 之前检查它:
let commentsList = article.comments.length &&
article.comments.map((comment, index) => (
<Fragment>{comment.title}</Fragment>
));
您也可以检查 title:
<Fragment>{comment.title && comment.title || ''}</Fragment>
Bhojendra Rauniyar
2019-06-28