如何在反应中的对象数组内设置对象数组的状态
How to set a state of an array of object inside an array of objects in react
我正在尝试在另一个对象数组中的对象数组中设置一个状态。我尝试了很多东西,但我找不到好的解决方案。
这是我的数组:
this.state = {
Pages: [
{
image: undefined,
audio: undefined,
audioName: undefined,
subtitles: 'up',
Langs: [
{
lang: 'fr_FR',
text: '',
}
]
}
]
};
我想修改 this.state.Pages[i].Langs[y].lang 或 .text 值。
有人有想法吗?
您可以创建 Pages
和 Pages[i].Langs
数组的副本,创建 Pages[i].Langs[y]
对象的副本并覆盖 lang
或 text
属性.
例子
changeText = (i, y, text) => {
this.setState(previousState => {
const Pages = [...previousState.Pages];
const Langs = [...Pages[i].Langs];
Langs[y] = { ...Langs[y], text };
Pages[i] = { ...Pages[i], Langs };
return { Pages };
});
};
在这个嵌套级别,我建议您使用 immer 库:
import produce from "immer"
this.setState((oldState) => {
return produce(oldState, draftState => {
draftState.Pages.Langs.push({ lang: 'it_IT', text: 'foo' })
})
})
immer 的强大之处在于你可以随心所欲地修改草稿,而无需触及旧状态。
我正在尝试在另一个对象数组中的对象数组中设置一个状态。我尝试了很多东西,但我找不到好的解决方案。
这是我的数组:
this.state = {
Pages: [
{
image: undefined,
audio: undefined,
audioName: undefined,
subtitles: 'up',
Langs: [
{
lang: 'fr_FR',
text: '',
}
]
}
]
};
我想修改 this.state.Pages[i].Langs[y].lang 或 .text 值。 有人有想法吗?
您可以创建 Pages
和 Pages[i].Langs
数组的副本,创建 Pages[i].Langs[y]
对象的副本并覆盖 lang
或 text
属性.
例子
changeText = (i, y, text) => {
this.setState(previousState => {
const Pages = [...previousState.Pages];
const Langs = [...Pages[i].Langs];
Langs[y] = { ...Langs[y], text };
Pages[i] = { ...Pages[i], Langs };
return { Pages };
});
};
在这个嵌套级别,我建议您使用 immer 库:
import produce from "immer"
this.setState((oldState) => {
return produce(oldState, draftState => {
draftState.Pages.Langs.push({ lang: 'it_IT', text: 'foo' })
})
})
immer 的强大之处在于你可以随心所欲地修改草稿,而无需触及旧状态。