I guess writing setState() inside render() leads to infinite call of the render(), but I have to update the condition in the similar way.
here is my mock code.
export default class MapSeat extends Component {
constructor(props) {
super(props)
this.state = {
data: props.data
}
}
componentWillReceiveProps(nextProps){
this.setState({ data: nextProps.data });
}
render(){
const { data } = this.state;
const { parameter1, parameter2} = data;
return (
<SomeComponent
persons={data.persons}
onPersonSelect={(f) => {
let person = find(data.persons, function (o) { return o.id === f; });
this.setState({
data: {
parameter1: person.fullName,
parameter2: person.id
}
});
this.setState({ data: this.state.data });
}}/>
)
}
}
Define your handler method in Component body.
personSelectHandler(f){
let data = // You need to get data from somewhere of course.
let person = find(data.persons, function (o) { return o.id === f; });
this.setState({
data: {
parameter1: person.fullName,
parameter2: person.id
}
});
this.setState({ data: this.state.data });
}
Then reference it from render() like so :
render(){
return (
<SomeComponent
persons={data.persons}
onPersonSelect={this.personSelectHandler} />
);
}
Finally, in <SomeComponent />
you can call it as :
handler(){
let f = //your param to send parent
this.props.onPersonSelect(f);
}