Один из способов сделать это - обработать скрытие и отображение внутри каждого дочернего компонента comp1
и comp2
.
Таким образом, вы по-прежнему будете отображать как comp1
, так и comp2
из родительского компонента, но вы передадите опору каждому из них, чтобы сообщить им, нужно ли им отображать или скрывать внутреннее содержимое, если показывать, то отображать правильное содержимое компонента, иначе просто визуализировать пустое <Text></Text>
Это означает, что оба дочерних компонента существуют в родительском компоненте, и они никогда не удаляются, но вы контролируете, какой из них должен показывать собственное содержимое с помощью родительского компонента.
Таким образом, ваши данные извлекаются только один раз.
Проверьте рабочий пример в react js: https://codesandbox.io/s/84p302ryp9
Если вы проверили журнал консоли, вы обнаружите, что загрузка выполняется один раз для comp1 и comp2.
Также проверьте тот же пример в response native ниже:
class Parent extends Component {
constructor(props)
{
super(props);
this.state={
show1 : true //by default comp1 will show
}
}
toggleChild= ()=>{
this.setState({
show1 : !this.state.show1
});
}
render(){
return (
<View >
<Button onPress={this.toggleChild} title="Toggle Child" />
<Comp1 show={this.state.show1} />
<Comp2 show={!this.state.show1} />
</View>
)
}
}
Comp1:
class Comp1 extends Component
{
constructor(props) {
super(props);
this.state={
myData : ""
}
}
componentWillMount(){
console.log("fetching data comp1 once");
this.setState({
myData : "comp 1"
})
}
render(){
return (
this.props.show ? <Text>Actual implementation of Comp1</Text> : <Text></Text>
)
}
}
Comp2:
class Comp2 extends Component {
constructor(props) {
super(props);
this.state = {
myData2: ""
}
}
componentWillMount() {
console.log("fetching data in comp2 once");
this.setState({
myData2: "comp 2"
});
}
render() {
return (
this.props.show ? <Text>Actual implementation of Comp2</Text> : <Text></Text>
)
}
}
person
Amr Labib
schedule
31.10.2017