gpt4 book ai didi

javascript - redux 中的初始状态无法正常工作

转载 作者:行者123 更新时间:2023-11-28 17:31:46 25 4
gpt4 key购买 nike

我想显示<Alert />组件取决于状态值 isVisible 。我设置了初始状态,但它不起作用,尽管我在 createLogger 中看到状态正在改变。我究竟做错了什么?我使用联合 reducer 。

reducer_alert.js

const initialState = {
isVisible: false
}

export default function (state = initialState, action) {
switch (action.type) {
case FETCH_WEATHER:
return { isVisible: false };
case FETCH_WEATHER_ERROR:
return { isVisible: true };
}
return state;
}

index_reducer.js

const rootReducer = combineReducers({
weather: WeatherReducer,
isVisible: AlertReducer
});

export default rootReducer;

weather_container.js

 render() {
return (
<div>
{this.props.isVisible ? <Alert alertInfo="Sorry, but city not found." /> : null }
</div>
)
}
}

actions.js

export const FETCH_WEATHER = 'FETCH_WEATHER';
export const FETCH_WEATHER_ERROR = 'FETCH_WEATHER_ERROR';

export function fetchWeather (city) {
const url = `${ROOT_URL}&q=${city}`;
const request = axios.get(url);

return (dispatch) => {
request
.then(({data}) => {
dispatch({type: FETCH_WEATHER, payload: data});
})
.catch((error) => {
dispatch({type: FETCH_WEATHER_ERROR, payload: error});
});
};
}

我可以告诉更多,当我修改 reducer 警报时,如下所示,一切正常:

export default function (state = false, action) {
switch (action.type) {
case FETCH_WEATHER:
return false;
case FETCH_WEATHER_ERROR:
return true;
}
return state;
}

最佳答案

那是因为当您创建这样的 reducer 时:

const rootReducer = combineReducers({
weather: WeatherReducer,
isVisible: AlertReducer
});

您将看到如下所示的状态:

state = {
weather: ...,
isVisible: ...
}

并通过查看您的 reducer 初始状态:

const initialState = {
isVisible: false
}

你应该这样访问它:在你的组件中 state.isVisible.isVisible ,这是因为你的reducer只负责状态的 isvisible 部分(而不是整个州)

TLDR

你的第一个reducer返回一个对象:{isVisible: false|true },所以每当你想访问状态时,你应该这样做:state.isVisible.isVisible,而在第二个示例中,您的 reducer 返回 bool 值 true|false,这就是为什么在访问 state.isVisible 时它工作得很好。

关于javascript - redux 中的初始状态无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50214969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com