大家好!
我是Redux的新手,我尝试构建天气应用程序。我的州看起来像:
#include <stdio.h>
#include <mntent.h>
FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *stream);
int addmntent(FILE *stream, const struct mntent *mnt);
int endmntent(FILE *streamp);
char *hasmntopt(const struct mntent *mnt, const char *opt);
/* GNU extension */
#include <mntent.h>
struct mntent *getmntent_r(FILE *streamp, struct mntent *mntbuf,
char *buf, int buflen);
我有city reducer和selectedCity reducer。当用户删除除最后一个之外的所有城市我想强制选择城市。更改城市时如何影响selectedCity? (在这种情况下从城市数组中删除)
答案 0 :(得分:0)
没有办法自动完成,您需要在更改城市数组时修改selectedCity,或者使用条件。
cities.length === 1 ? cities[0] : selectedCity
在您的渲染功能中或您需要的地方。
修改强>
您要做的是,活动数据是存储在城市中的扩展异步收集版本,需要副作用。
这样做的一种干净方式是这样的:
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>
);
function mapStateProps(state) {
selectedCity: state.selectedCity,
cities: state.cities,
}
答案 1 :(得分:0)
哇!我找到了答案!
我忘了,在异步行动中除了&#34;发送&#34;我们将getState方法作为thunk中间件中的第二个参数传递。
例如:
export default function thunkMiddleware({ dispatch, getState }) {
return next => action => {
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}
}
这是解决方案:在行动中,在同步调度DELETE_CITY之后我们检查getState()。cities长度。如果它等于1 - 发送CHOOSE_CITY动作那个城市。
例如:
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));
}
}
}