Я пытаюсь отобразить родительский компонент, у которого есть два дочерних элемента. Рендеринг дочерних элементов будет переключаться, поэтому один раз будет отображаться только первый дочерний элемент, в другой раз он будет последним и, наконец, он вернется к первому дочернему элементу (который затем должен содержать все значения, показанные ранее). Я думал, что это будет просто, но оказалось, что это не так.
Теперь к проблеме: всякий раз, когда вызывается метод switchContainer, он переключает контейнер и отображает другой. Однако все переменные-члены, свойства и состояния теряются, и это в основном восстановило дочерний компонент с нуля.
Есть ли способ сохранить дочерние компоненты «как есть», и после повторного рендеринга он снова будет содержать все переменные-члены, свойства и состояния?
Я знаю, что вы можете отправлять реквизиты и состояния элементу следующим образом:
<Child props = {<data>} states = {<data>}>
но это не решает проблему с отсутствующими переменными-членами, и, на мой взгляд, это непростое решение.
Моя попытка пока (это всего лишь макет):
class Parent extends React.Component<any,any> {
private firstContainer:any;
private secondContainer:any;
private currentContainer:any;
constructor(props:any) {
super(props);
this.firstContainer = <Child>;
this.secondContainer = <Child>;
}
public render() {
return (
<div>
{this.currentContainer}
</div>
);
}
public switchContainer() {
if (this.currentContainer === this.firstContainer) {
this.currentContainer = this.secondContainer;
}
else {
this.currentContainer = this.firstContainer;
}
this.forceUpdate();
}
}
class Child extends React.Component<any,any> {
private anyValue:string;
constructor(props) {
this.change = this.change.bind(this);
}
public render() {
return (
<input onChange = {this.change} value = {this.anyValue}/>
);
}
private change(e:any) {
this.anyValue = e.target.value;
}
}





Вы можете попробовать сохранить состояние и обновить дочерние элементы в рендере вместо сохранения дочерних элементов как firstContainer и secondContainer
class Parent extends React.Component<any, any> {
constructor(props) {
super(props);
this.state = {
firstChild: true
};
}
public render() {
const { firstChild } = this.state;
<div>
<Child1 show = {firstChild}/>
<Child2 show = {!firstChild} />
</div>
}
public switchContainer() {
this.setState(({ firstChild }) => ({ firstChild: !firstChild }));
};
}
И в дочернем компоненте дескриптор show to showContent в противном случае отобразит значение null. Если вы хотите сохранить состояние, не следует отключать компонент.
Вы можете сохранить любое значение как состояние в родительском компоненте.
Спасибо за быстрый ответ, к сожалению, это невозможно, так как дети могут быть добавлены «на лету» и неизвестны с самого начала. Таким образом, родительский компонент всегда должен будет повторно отображать дочерние элементы после добавления нового дочернего элемента. В вашем примере всякий раз, когда изменяется «firstChild», дочерний элемент будет повторно отображать, поэтому переменная-член «anyValue» снова теряется.