Lit-Element 和 Redux:更新数组中的对象
Lit-Element and Redux: Update Object in Array
我正在尝试更新嵌套在 players
数组中的对象中的 roll
属性。
我的状态是这样的:
players: [
{
"id": "44ufazeep0o",
"name": "test-player-1",
"roll": 0,
"totalWins": 0
},
{
"id": "eu8hutex7z9",
"name": "test-player-2",
"roll": 0,
"totalWins": 0
}
]
这是我的 action
:
export const addRoll = (roll, id) => {
return {
type: ADD_ROLL,
roll,
id,
}
}
这是我的 reducer
:
case ADD_ROLL:
return state.players.map((player) => {
if (player.id === action.id) {
return {
...player,
roll: action.roll,
}
}
return player;
});
...
我正在观看 state.players
组件,如下所示:
import { connect } from 'pwa-helpers'; // connects a Custom Element base class to the Redux store
...
stateChanged(state) {
this.players = state.players;
}
render() {
return html`${this.players.map((player)=> html`<h1>${player.name}</h1>`)}`
}
现在,每当我在我正在观看的组件中调用 store.dispatch(addRoll(this.roll, this.id))
、this.players.map()
returns undefined
state.players
。
非常感谢任何关于为什么会发生这种情况的意见!
你有 return 一个数组而不是一个对象,其中玩家在 ADD_ROLL 动作被调度后从状态中输入它。正确的更新方式是
case ADD_ROLL:
return {
...state,
players: state.players.map((player) => {
if (player.id === action.id) {
return {
...player,
roll: action.roll,
}
}
return player;
});
}
...
我正在尝试更新嵌套在 players
数组中的对象中的 roll
属性。
我的状态是这样的:
players: [
{
"id": "44ufazeep0o",
"name": "test-player-1",
"roll": 0,
"totalWins": 0
},
{
"id": "eu8hutex7z9",
"name": "test-player-2",
"roll": 0,
"totalWins": 0
}
]
这是我的 action
:
export const addRoll = (roll, id) => {
return {
type: ADD_ROLL,
roll,
id,
}
}
这是我的 reducer
:
case ADD_ROLL:
return state.players.map((player) => {
if (player.id === action.id) {
return {
...player,
roll: action.roll,
}
}
return player;
});
...
我正在观看 state.players
组件,如下所示:
import { connect } from 'pwa-helpers'; // connects a Custom Element base class to the Redux store
...
stateChanged(state) {
this.players = state.players;
}
render() {
return html`${this.players.map((player)=> html`<h1>${player.name}</h1>`)}`
}
现在,每当我在我正在观看的组件中调用 store.dispatch(addRoll(this.roll, this.id))
、this.players.map()
returns undefined
state.players
。
非常感谢任何关于为什么会发生这种情况的意见!
你有 return 一个数组而不是一个对象,其中玩家在 ADD_ROLL 动作被调度后从状态中输入它。正确的更新方式是
case ADD_ROLL:
return {
...state,
players: state.players.map((player) => {
if (player.id === action.id) {
return {
...player,
roll: action.roll,
}
}
return player;
});
}
...