当我提出这个问题时,脑海中浮现出许多疑虑。好吧,首先我会给出我的问题描述。
在搜索框中键入内容(称之为search_query), X需要更新与search_query匹配的复选框。 [请注意,我通过一些api调用得到了复选框的所有值。并在创建组件时完成。 ]
我想到的第一个疑问是
如果值更多搜索需要更多时间。
还是有其他办法吗?
答案 0 :(得分:1)
由于没有共享代码。假设你使用普通的React(没有Redux,使用中间件)。
回答你的问题:
[1]是否可以更改组件内的道具值?
更改组件内的道具值是一种不好的方法。
"所有React组件必须像其道具一样表现纯粹的功能。"
[参考:https://facebook.github.io/react/docs/components-and-props.html#props-are-read-only]
此外,如果在组件中更改了props值,则视图不会获得更新。
[2]还是有其他方法可以做到这一点。
是(组件内部没有突变) 使用" state"保持价值的财产& setState更新值。
[3]如何将信息存储在反应组件中?
让我们将组件X重命名为FilterData, searchbox(SearchBox)& checkboxes(SelectionBox)是两个独立的组件。
// Define state to FilterData
class FilterData extends React.Component {
constructor() {
super()
this.state = {
term: '',
searchResults: []
}
}
....
}
// pass the state values to child components as props
class FilterData extends React.Component {
....
render() {
return (
<div>
<SearchBox term={this.state.term} />
<SelectionBox options={this.state.searchResults} />
</div>
)
}
}
在React App中, 数据流自上而下(单向),应该有一个单一的事实来源。
SearchBox&amp; SelectionBox是两个独立的(兄弟)组件, SearchBox的州有条款(有搜索字符串) 当用户输入输入时,SearchBox将更新其状态,并可能检测更改事件并触发ajax并获取响应。
SelectionBox如何检测已发生的搜索,如何获取数据。 这就是将状态转移到共同祖先FilterData的原因。
[参考:https://facebook.github.io/react/docs/lifting-state-up.html]
[参考:https://facebook.github.io/react/docs/state-and-lifecycle.html#the-data-flows-down]
代码示例--------------------------------------------- --------