Шаги, чтобы получить желаемую функциональность (не рекомендуется, хотя использовать редукс или контекст):
Родитель:
class WashingPackageMotor extends Component {
constructor(props) {
super(props);
this.state = {
amount: "",
}
}
update(amount) {
this.setState({amount});
}
render() {
return (
<View style={styles.containerMain}>
<Grid scrollable>
<Section>
<Block size="100%">
<ComponentWashingPackage />
</Block>
</Section>
<Section>
<Block size="100%">
<ComponentList
amount={this.state.amount}
updateAmount={amount => this.update(amount)}
/>
</Block>
</Section>
</Grid>
<Grid>
<Section>
<Block size="100%">
<ComponentBottom
amount={this.state.amount}
/>
</Block>
</Section>
</Grid>
</View>
}
);
}
}
Child1:
всякий раз, когда вы хотитеДля обновления состояния просто вызовите функцию this.props.updateAmount(valueHere);
export default class ComponentList extends Component {
constructor(props) {
super(props)
this.state = {
value: 0,
amount: this.props.amount,
v0: 0,
v1: 0,
collapsed: false
// v5: 0,
// v6: 0
}
this.amount = 0
}
..........
..........
}
child 2:
class ComponentBottom extends Component {
constructor(props) {
super(props);
this.state = {
amount: this.props.amount,
};
}
render() {
return (
<Grid>
<View style={styles.bottomView}>
<View style={{ borderBottomColor: '#EEEEEE', borderBottomWidth:0.5}}/>
<Section>
<Block size="60%">
<Text style={styles.textHarga}>Total Harga</Text>
<Text style={styles.textPrice}>Rp 180.000</Text>
</Block>
<Block size="40%">
<ButtonProcessDisabled onPress={() => this.props.navigation.navigate('OrderConfirmation')}/>
</Block>
</Section>
</View>
</Grid>
)
}
}
ПРИМЕЧАНИЕ. Вам нужно будет использовать componentWillReceiveProps()
для версии реакции старше 16,3а для вышеперечисленного вам нужно будет использовать getDerivedStateFromProps
для обновления состояния на основе обновленных реквизитов.