我有kidsDetail组件它有自己的状态,在parent kidsDetail组件使用for循环渲染多次。我想获取点击保存按钮的详细信息listDetail信息列表。
Bellow是父组件代码
renderKidsDetails(totalkids) {
/*If user selects 'yes' for kids, then this function is called 'n'
times; n = no. of kids */
const kids= [];
if (this.state.addKidsDetails === true) {
for (let i = 0; i < totalkids; i++) {
kids.push(
<RenderChildDetails key={i} ivalue={i + 1} />
);
}
}
return (
<View style={{ marginLeft: 20 }}>
{kids}
</View>
);
}
KidsDetail.js它有两个州的孩子年龄和性别所以需要这个值在父组件中获取
class RenderChildDetails extends Component {
state={
kidsAge: 0,
kidsGender: '',
}
constructor(props) {
super(props);
onClicked=this.onClicked;
//Call function when the back button is pressed in the page header.
}
onClicked=()=>{
console.log(" kid Age "+this.state.kidsAge);
}
render()
{
return(
<View style={{flexDirection:'row',flex:1}}>
<View style={{backgroundColor:'black',height:20,width:20,borderRadius:10,margin:5,alignItems:'center', padding: 1}}>
<Text style={{color:'white'}}>{this.props.ivalue}</Text>
</View>
<TouchableOpacity onPress={() =>{
ActionSheet.show(
{
options: AGE,
cancelButtonIndex: CANCEL_INDEX,
destructiveButtonIndex: DESTRUCTIVE_INDEX,
title: "Select Age"
},
buttonIndex => {
this.setState({ kidsAge: AGE[buttonIndex] });
}
)
}
}>
<View style={{flex:1,margin:5,flexDirection:'row'}} >
<Text>Age: {this.state.kidsAge}</Text>
<Image source={require('../../../Assets/Icons/Settings/Black_down.png')}
style={{height:11,width:11,margin:5}} />
</View>
</TouchableOpacity>
<TouchableOpacity onPress={() =>
ActionSheet.show(
{
options: GENDER,
cancelButtonIndex: CANCEL_INDEX,
destructiveButtonIndex: DESTRUCTIVE_INDEX,
title: "Gender"
},
buttonIndex => {
this.setState({ kidsGender: GENDER[buttonIndex] });
}
)}>
<View style={{flex:1,margin:5,flexDirection:'row'}}>
<Text>Gender: {this.state.kidsGender}</Text>
<Image source={require('../../../Assets/Icons/Settings/Black_down.png')}
style={{height:11,width:11,margin:5}} />
</View>
</TouchableOpacity>
</View>
);
}
}
export default RenderChildDetails;
答案 0 :(得分:0)
在React中,只要更新子组件状态,就可以将处理程序传递给要调用的子组件,然后将子组件状态存储在父组件状态中。
检查以下代码:
class Parent extends Component {
constructor(props) {
super(props)
this.state = {};
this.handleChildUpdate = this.handleChildUpdate.bind(this);
this.getChildState = this.getChildState.bind(this);
}
//handler to update current parent state when child state is updated
handleChildUpdate(updatedState){
this.setState({
childState:updatedState
});
}
//log updated child state on button click
getChildState(){
console.log(this.state.childState.age);
}
render(){
<View >
<Child handleUpdate={this.handleChildUpdate} />
<Button onPress={this.getChildState}>
</View>
}
}
class Child extends Component {
constructor(props) {
super(props)
this.updateAge = this.updateAge.bind(this);
this.state = {
age:"10"
};
}
updateAge(text){
this.setState({
age:text
} , () => {
//this handler is passed as a prop from parent component
//this is how we update the parent state when any change happens to child state
this.props.handleUpdate(this.state);
});
}
render(){
<View >
<TextInput onChange={(text) => { this.updateAge(text) } } />
</View>
}
}