在两个组件之间传输状态
Transferring state between two components
我有一个呈现 searchResult 组件的 searchForm 组件。当 searchForm 得到结果时,它应该将状态传递给结果的状态。
这是我失败的地方。
var SearchForm = React.createClass({
getInitialState: function () {
return {
golden_record: {}
}
},
handleSearchSubmit: function (search_param) {
$.ajax({
url: this.props.url_variation,
type: 'GET',
data: search_param,
success: function (data) {
this.setState(
{
...
}
);
}.bind(this),
});
$.ajax({
url: this.props.url_golden,
type: 'GET',
data: search_param,
success: function (data) {
var golden_record = {
'site': data.sites[0].name,
'country': data.sites[0].country,
};
this.setState({'golden_record': golden_record});
}.bind(this),
})
},
render: function () {
return (
<div className="searchResult">
<SearchResult
golden_record={this.state.golden_record}
/>
</div>
);
}
});
搜索结果:
如您所见,我将 golden_record
作为 属性 传递给 SearchResult。在 SearchResult 中,当我将 <input />
的 value
设置为 属性 this.props.golden_record['site']
时,输入被固定为该值。但我想将 value 设置为 this.state.site
,以便以后可以根据需要更改它。所以我不知道如何将prop的只读值复制到state。
<input type="text" className="form-control" placeholder="Facility name" name="facilityName" onChange={this.onSiteChanged} value={this.props.golden_record['site']} ref="facilityName"></input>
有什么建议吗?
在您的 SearchResult
组件中,您可以在 componentWillReceiveProps
中设置状态:
var SearchResult = React.createClass({
...
getInitialState: function(){
return {
site: ''
}
},
componentDidMount: function(){
this.setState({ site: this.props.golden_record.site });
},
componentWillReceiveProps: function(newProps){
this.setState({ site: newProps.golden_record.site });
},
render: function(){
return <input type="text" className="form-control" placeholder="Facility name" name="facilityName" onChange={this.onSiteChanged} value={this.state.site} ref="facilityName"></input>
}
});
我有一个呈现 searchResult 组件的 searchForm 组件。当 searchForm 得到结果时,它应该将状态传递给结果的状态。 这是我失败的地方。
var SearchForm = React.createClass({
getInitialState: function () {
return {
golden_record: {}
}
},
handleSearchSubmit: function (search_param) {
$.ajax({
url: this.props.url_variation,
type: 'GET',
data: search_param,
success: function (data) {
this.setState(
{
...
}
);
}.bind(this),
});
$.ajax({
url: this.props.url_golden,
type: 'GET',
data: search_param,
success: function (data) {
var golden_record = {
'site': data.sites[0].name,
'country': data.sites[0].country,
};
this.setState({'golden_record': golden_record});
}.bind(this),
})
},
render: function () {
return (
<div className="searchResult">
<SearchResult
golden_record={this.state.golden_record}
/>
</div>
);
}
});
搜索结果:
如您所见,我将 golden_record
作为 属性 传递给 SearchResult。在 SearchResult 中,当我将 <input />
的 value
设置为 属性 this.props.golden_record['site']
时,输入被固定为该值。但我想将 value 设置为 this.state.site
,以便以后可以根据需要更改它。所以我不知道如何将prop的只读值复制到state。
<input type="text" className="form-control" placeholder="Facility name" name="facilityName" onChange={this.onSiteChanged} value={this.props.golden_record['site']} ref="facilityName"></input>
有什么建议吗?
在您的 SearchResult
组件中,您可以在 componentWillReceiveProps
中设置状态:
var SearchResult = React.createClass({
...
getInitialState: function(){
return {
site: ''
}
},
componentDidMount: function(){
this.setState({ site: this.props.golden_record.site });
},
componentWillReceiveProps: function(newProps){
this.setState({ site: newProps.golden_record.site });
},
render: function(){
return <input type="text" className="form-control" placeholder="Facility name" name="facilityName" onChange={this.onSiteChanged} value={this.state.site} ref="facilityName"></input>
}
});