【发布时间】:2016-07-14 22:46:03
【问题描述】:
我是 redux 世界的新手,我正在尝试制作报纸应用程序。我目前正在研究用户可以搜索特定报纸标题的搜索功能。问题是当我第一次输入例如'a'时,状态是''。当我输入更多例如'b'时,状态显示该术语是'a',而它应该是'ab'。我正在使用 redux chrome 工具来检查这个全局状态。
我的 Actioncreator 真的很简单(只返回传递给它的术语):
export function search(term) {
return{
type:SEARCH,
term
}
}
这里是减速器:
const SearchReducer = (state = '', action) => {
switch (action.type) {
case SEARCH:
return action.term;
default:
return state;
}
}
这是根减速器:
/*Application state*/
const rootReducer = combineReducers({
weather: WeatherReducer,
filters: FilterReducer,
articles:ArticleReducer,
search: SearchReducer // this should be 'ab', but is 'a'
});
这是非常简单的设置。以下是我与 redux 沟通的方式。
我有自己的 material-ui 文本字段(我也尝试过香草输入字段)
<TextField style={style.searchWidget.search}
floatingLabelText="Search"
value={this.state.term}
onChange={this._onSearchChange}
/>
当用户输入内容时,_onSearchChange 函数被触发。
_onSearchChange(event) {
this.setState({term: event.target.value});
this.props.search(this.state.term);
}
这将设置此搜索组件的当前状态。然后它将分派搜索操作,该操作将更新全局状态。但不能正常工作。全局状态总是落后 1 步。
有什么想法吗?
编辑: 看起来它不是redux而是react。组件状态不会立即更新。正确的术语被传递给 actionreducer,所以这不是 redux 的错。我试图在设置状态后打印出 this.state.term 。而且状态似乎没有更新。
【问题讨论】:
标签: search reactjs state redux