Я надеюсь, что эти простые коды для действий и редукторов помогут вам понять response-redux.
Для action
,
export const signin = (userArray) => {
return {
type: "SIGNIN",
payload: userArray,
};
};
export const loggedout = (userArray = []) => {
// You can do something for making users logged out here using userArray and return changed value using payload
// Or just return [] as payload because it's logged out
return {
type: "LOGGEDOUT"
payload: userArray,
};
};
export const initiate = (userArray) => {
return {
type: "INITIATE",
payload: userArray,
}
}
Для reducer
, пожалуйста, рассмотрите редуктор как сменщикof state.
const IsLoggedReducer = (state = initialState, action) => {
switch (action.type) {
case "SIGNIN":
return action.payload;
case "LOGGEDOUT":
return action.payload;
case "INITIATE":
return action.payload;
default:
return state;
}
};
Когда дело доходит до вызова api, я хочу порекомендовать использовать redux-saga
или redux-thunk
, но если вам нужно вызывать api только один раз в начале компонента. Вы можете использовать useEffect
(https://reactjs.org/docs/hooks-effect.html), поскольку componentDidMount
используется для вызова API в компоненте класса.
И я надеюсь, что этот код useEffect поможет вам получить чувство
import { useSelector, useDispatch } from 'react-redux';
import { initiate } from 'actions';
function main () {
const state = useSelector((state) => state.user);
const dispatch = useDispatch();
const onInit = useCallback((data) => dispatch(initiate(data), [dispatch]);
useEffect(() => {
// call api and get response
const userArray = fetch();
onInit(userArray);
}, []);
return (<div>...</div>);
}