我对reactJS相当新颖,我想知道处理在单个页面上具有相同表单组件的最佳方法。请记住,我正在使用助焊剂,并且组件正在与商店交谈。在同一页面上使用相同的ReactJS表单组件
例如: < SearchForm /> < SearchForm />
当试图使用的形式#1的输入字段,形式#2的同时获取从形式#1的值。我认为问题来自商店。组件正在对同一商店说话,商店一次更新所有组件。
我该如何处理这个问题?
这是我到目前为止的代码。
const SearchField = React.createClass({
propTypes: {
isSearchActivated: React.PropTypes.bool.isRequired,
},
_onChange() {
var previousHighlightedIndex = this.state.highlightedIndex;
this.setState(getStateFromStores(), function() {
if (previousHighlightedIndex == 0 &&
this.state.highlightedIndex == -1) {
this.refs.SearchBar.selectAll();
}
});
},
componentDidMount() {
if (window.location.pathname == "/" && !Modernizr.mq("screen only and (max-width: 768px)")) {
$(ReactDOM.findDOMNode(this.refs.SearchBar)).find("input").focus();
}
},
componentWillUnmount() {
SearchResultStore.removeChangeListener(this._onChange);
},
onChangeSearchString(e) {
SearchResultsUtils.search(e.target.value);
},
onBlur(e) {
var self = this;
var cb = function() {
if (!self.state.selectedResult && self.state.results.length) {
self.handleSelectedResult(0);
}
SearchResultsActions.disallowResultsDisplay();
};
if($(".search-bar").hasClass("active")) {
$(".search-bar.active").removeClass("active");
}
},
onFocus(e) {
$(ReactDOM.findDOMNode(this.refs.SearchBar)).closest(".search-bar").addClass("active");
},
handleSubmit() {
var self = this;
},
render() {
var className = "search-bar clearfix";
return (
<div className={className}>
<div className="search-bar-search">
<SearchBar
searchString={this.state.searchString}
onChange={this.onChangeSearchString}
onKeyDown={this.onKeyDownSearchString}
onFocus={this.onFocus}
onBlur={this.onBlur}
placeholder="Search Meds or Conditions"
ref="SearchBar" />
</div>
<SearchButton
handleSubmit={this.handleSubmit} />
</div>
);
},
});
module.exports = SearchField;
感谢您的帮助提前。
你可以添加你的代码吗?听起来就像两种形式共享相同的状态。 – tvdpol
如果你确实有简单的' ',那么当你输入表单#1中的内容时,反应不会导致表单#2被更新。你的标签也提到了jQuery。你有没有机会使用jQuery来更新表单?那么这更可能是你问题的根源。 (你真的不应该混合jQuery并以这种方式作出反应)。你能为你的问题增加更多的代码吗? –
wintvelt
我更新了问题。 – Hector