Reactjs Redux:影响两个状态键
各位! 我是Redux的新手,我尝试构建天气应用程序。我的状态是:Reactjs Redux:影响两个状态键,reactjs,redux,Reactjs,Redux,各位! 我是Redux的新手,我尝试构建天气应用程序。我的状态是: const state={ 城市:[], 所选城市:{} } 我有city reducer和Selected city reducer。当用户删除除最后一个城市以外的所有城市时,我想强制选择该城市。更改城市时,我如何影响selectedCity?(在本例中,从城市数组中删除)如果无法自动执行,您需要在更改城市数组时修改所选城市,或者使用条件列表 cities.length==1?城市[0]:在渲染功能中或需要的任何位置选择城市
const state={
城市:[],
所选城市:{}
}
我有city reducer和Selected city reducer。当用户删除除最后一个城市以外的所有城市时,我想强制选择该城市。更改城市时,我如何影响selectedCity?(在本例中,从城市数组中删除)如果无法自动执行,您需要在更改城市数组时修改所选城市,或者使用条件列表
cities.length==1?城市[0]:在渲染功能中或需要的任何位置选择城市
编辑:
您要做的是,活动数据是存储在城市中的数据的扩展异步收集版本,这需要副作用
一个干净的方法是这样的:
constructor(props) {
super(props);
this.cityChangeHandler = this.cityChangeHandler.bind(this);
cityChangeHandler(city) {
changeActive(city); // That's an action, which will update the Redux store.
}
render() {
return (
<div>{this.props.selectedCity && selectedCity.name}</div>
);
哇!我找到了答案 我忘了,在异步操作中,除了“dispatch”之外,我们在thunk中间件中传递getState方法作为第二个参数 例如:
export default function thunkMiddleware({ dispatch, getState }) {
return next => action => {
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}
}
export function deleteCity(city) {
return function(dispatch, getState) {
dispatch({
type: CITY_DELETE,
payload: city
})
var currentCitiesLength = getState().cities.length;
if(currentCitiesLength == 1) {
dispatch(selectCity(getState().cities[0]));
} else if(currentCitiesLength == 0) {
// Pass null to clean selectedCity
dispatch(selectCity(null));
}
}
}
这就是解决方案:在运行中,在同步调度DELETE_CITY之后,我们检查getState()。cities length。如果它等于1-调度,则选择该城市的城市行动
例如:
export default function thunkMiddleware({ dispatch, getState }) {
return next => action => {
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}
}
export function deleteCity(city) {
return function(dispatch, getState) {
dispatch({
type: CITY_DELETE,
payload: city
})
var currentCitiesLength = getState().cities.length;
if(currentCitiesLength == 1) {
dispatch(selectCity(getState().cities[0]));
} else if(currentCitiesLength == 0) {
// Pass null to clean selectedCity
dispatch(selectCity(null));
}
}
}
和是不同的组成部分。第一个使用城市状态键,第二个使用activeCity状态键。每一个都不知道另一个。在你拥有的减速机中,减速机可以同时管理这两个减速机,即使你发送操作来处理其中一个减速机them@Dmitriy在MapStateTrops中,可以传递所需的任何redux变量。您不需要同时修改这两个选项来通知两个不同的组件。@Kejt您是指CombineReducer的结果吗?@zurfyx将cities键传递给activeCity组件是正确的解决方案吗?