【发布时间】:2020-11-21 15:04:13
【问题描述】:
我正在使用 React Hooks 和 Effector 尝试将数据渲染到卡片上。数据将从React-Select 下拉列表(代表不同的国家/地区)中删除,其想法是用户将能够根据这些国家/地区添加选择,有点像 TODO 应用程序。
但是,我发现每当我返回上一个下拉选择时,数据都不会保存。我正在使用effector、hooks、react-select 和react-jss 进行造型。团队从React-Select 组件作为道具传递。
const PlayerComponent = ({ containerStyles, team }) => {
const [items, setItems] = useState([]);
const teamsStore = useStore(testTeams);
const playersStore = useStore(testPlayers);
useEffect(() => {
const playersByTeam = playersStore.filter(
(player) =>
player.teamId ===
teamsStore.find(function (t) {
return t.label === team;
}).teamId
);
setItems(
playersByTeam.map(function (player) {
let players = { name: player.name };
return players;
})
);
}, [playersStore,team,teamsStore]);
function onAddButtonClick() {
setItems((prev) => {
const newItems = [...prev];
newItems.push({
name: `Player ${newItems.length + 1}`
});
playersStore.push({
name: `Player ${newItems.length + 1}`
});
return newItems;
});
}
function renderAddButton() {
return (
<Row
horizontal='center'
vertical='center'
onClick={onAddButtonClick}
>
Add Player
</Row>
);
}
return (
<CardComponent
containerStyles={containerStyles}
title={team}
items={[
<Row horizontal='space-between' vertical='center'>
<span>
Create new player
</span>
{renderAddButton()}
</Row>,
...items.map((item, index) => (
<Player index={index} item={item} />
))
]}
/>
);
};
这是我的Player 组件,每个代表一行:
function Player({item = {} }) {
return (
<Row horizontal='space-between' vertical='center'>
<Row>
<span>{item.name}</span>
</Row>
</Row>
);
}
这是一个示例图像。基本上,在从下拉列表中选择一个国家(比如英格兰)后,我可以添加一个球员,它会呈现在卡片上——但是,当我选择一个不同的国家并返回前一个国家时,添加的球员就会消失。任何想法如何解决这个问题?我现在正在为onAddButtonClick() 函数而烦恼...
【问题讨论】:
-
是
team国家吗? -
@dpwrussell 是的
team确实是国家!
标签: javascript reactjs react-hooks react-select effector