我想从无状态组件PaymentScreen
更改组件OverlayAddAddress
的状态
在OverlayAddAddress
里面,我有这个:
isOverlayVisible,
onBackdropPress,
address,
city,
zipCode,
phoneNumber,
}) => {
return (
<Overlay
overlayBackgroundColor="#f2f2f2"
isVisible={isOverlayVisible}
onBackdropPress={onBackdropPress}>
<TextInput
style={styles.input}
placeholder="Adresse"
onChangeText={address => address}
value={address}
/>
<TextInput
style={styles.input}
placeholder="Ville"
onChangeText={city => city}
value={city}
/>
<TextInput
style={styles.input}
placeholder="Code postal"
onChangeText={zipCode => zipCode}
value={zipCode}
/>
<TextInput
style={styles.input}
keyboardType="decimal-pad"
placeholder="Numéro de téléphone"
onChangeText={phoneNumber => phoneNumber}
value={phoneNumber}
/>
<TouchableOpacity style={styles.buttonSave}>
<Text style={styles.buttonSaveText}>Enregister</Text>
</TouchableOpacity>
</Overlay>
)
}
在父组件中,我有这个:
<OverlayAddAddress
isOverlayVisible={this.state.overlayAddAdress}
onBackdropPress={() => this.setState({overlayAddAdress: false})}
address={this.state.address}
city={this.state.city}
zipCode={this.state.zipCode}
phoneNumber={this.state.phoneNumber}
/>
我的问题是,何时要从OverlayAddAddress内的textInput更改状态,我可以将道具从父项转移到子项,但是我不知道如何获取用于更新父项中状态的值。
答案 0 :(得分:1)
在PaymentScreen中,创建一个更改所需字段的函数。例如:
const changeText = (text) => { setText(text) }
然后,将此函数作为道具传递给OverlayAddAddress。然后,在您的OverlayAddAddress组件中使用它来更改父值。例如:
<TextInput
style={styles.input}
keyboardType="decimal-pad"
placeholder="Numéro de téléphone"
onChangeText={phoneNumber => setText(phoneNumber)}
value={phoneNumber}
/>
答案 1 :(得分:0)
对于那些要从无状态的compnnet内部更新父状态的情况,您需要传递一个函数来更新父类中的状态
在您的情况下,您可以使用onChange来更改道具(即状态的副本)
<TextInput
style={styles.input}
placeholder="Adresse"
onChangeText={address => address} // this line should be passed from the parent
value={address}
/>
所以解决方案是使onChangeText成为道具,以使父母可以像这样传递该功能,
<TextInput
style={styles.input}
placeholder="Adresse"
onChangeText={props.onAddressChange}
value={address}
/>
并在父组件中执行此操作
<OverlayAddAddress
isOverlayVisible={this.state.overlayAddAdress}
onBackdropPress={() => this.setState({overlayAddAdress: false})}
address={this.state.address}
onAddressChange={(value) => setState({address: value})} // will do the trick for you
city={this.state.city}
zipCode={this.state.zipCode}
phoneNumber={this.state.phoneNumber}
/>