【发布时间】:2016-04-11 15:04:25
【问题描述】:
我对 reactJS 相当陌生,我想知道在单个页面上处理相同表单组件的最佳方法是什么。请记住,我正在使用助焊剂,并且该组件正在与商店交谈。
例如:
当我尝试使用表单#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;
提前感谢您的帮助。
【问题讨论】:
-
你能添加你的代码吗?听起来这两种形式共享相同的状态。
-
如果你真的有普通的
<SearchForm/> <SearchForm/>,那么当你在表单#1 中输入内容时,react 不会导致表单#2 被更新。您的标签还提到了 jQuery。您是否有机会使用 jQuery 来更新表单?那么这更有可能是您问题的根源。 (而且你真的不应该混合 jQuery 并以这种方式做出反应)。您能否为您的问题添加更多代码? -
我更新了问题。
标签: javascript jquery reactjs jsx