【发布时间】:2020-06-25 08:41:54
【问题描述】:
我是 React 新手,我正在尝试构建一个应用程序,将足球运动员分成两支球队,但在将数据从一个组件传递到另一个组件时遇到了困难。
我已经安装了 redux 和 react-redux。
在我的 reducer.js 中,我获取了一个玩家列表并将它们打乱,将打乱的列表添加到 state:
const shufflePlayers = (state) => {
return {
...state,
shuffledList: [
...state.playersList.sort(() => Math.random() - 0.5)
]
}
}
然后在 'src/components/DisplayTeams.index.js' 中,我将 'shuffledList' 数组映射到 props:
import { connect } from "react-redux";
import DisplayTeams from "./DisplayTeams";
const mapStateToProps = (state) => {
return {
shuffledList: state.shuffledList,
};
};
export default connect(mapStateToProps)(DisplayTeams);
最后,在“src/components/DisplayTeams.js”中,我尝试在列表中呈现“shuffledList”数组:
import React from 'react';
import '../../App.css';
const DisplayTeams = ({ shuffledList }) => (
<div>
<ul>
{shuffledList.map((player, index) => (
<li key={index}>{player.name}</li>
))}
</ul>
</div>
);
export default DisplayTeams;
但出现 TypeError: Cannot read property 'map' of undefined,表明 'shuffledList' 数组为空或根本没有设置。
任何帮助将不胜感激!
【问题讨论】:
-
你在mapState中有console.log(state)看看是什么吗?
-
这一行
shuffledList: state.shuffledList似乎根本不对,所以是的,只是看看你的状态如何。 -
以及shuffledList的初始状态是什么?
-
请注意,在
shufflePlayers函数中,shuffledList: [ ...state.playersList.sort() ]会改变原始的state.playersList数组 - 您需要在 before 排序为 .sort( ) 改变原始数组:shuffledList: [...state.playersList].sort() -
state.shuffledList 是 state.playersList 的一个副本,你不应该将值保存在你可以从 state 计算出来的 state 中,而是使用 selector。
标签: reactjs redux react-redux