我无法映射从 API 获取的数据
I cannot map on the data fetched from API
我使用 Redux-Saga 从 API 获取数据,但当它更新状态时我无法使用它。这可能是因为我试图在数据加载到 redux 状态之前访问数据。
//saga.js
import axios from 'axios';
import { put, takeLatest, all } from 'redux-saga/effects'
const URL = "https://api.staging.gamerarena.com/disputes/";
function* fetchInfo() {
const res = yield axios.get(URL).then((response) => response);
yield put({
type: 'FETCH_INFO',
payload: res
})
}
function* actionWatcher() {
yield takeLatest('GET_INFO', fetchInfo)
}
export default function* rootSaga() {
yield all([
actionWatcher(),
]);
}
在上面,您可以看到 GET_INFO 触发了 fetch_info,但它会在所有其他操作之后更新状态。我尝试用 useEffect 修复它,但它没有帮助,或者我没有正确使用它。
const DisputeCard = (props) => {
const state = useSelector(state => state?.apiInfo?.apiInfo[0]?.results)
const dispatch = useDispatch()
useEffect(() => {
dispatch(getInfo()) ;
console.log("State is ", state) // state returns undefined in the console
}, [] );
是的,您无法在获取数据之前访问数据。您可以等待数据获取或将回调函数传递给您的操作。
使用另一个 useEffect 来等待获取数据,您可能还必须等待数据在您的组件内呈现。
const state = useSelector(state => state?.apiInfo?.apiInfo[0]?.results)
const dispatch = useDispatch()
useEffect(() => {
dispatch(getInfo()) ;
}, [] );
useEffect(() => {
if(state) {
console.log("State is ", state);
}
}, [state] );
if(!state) {
return null;
}
return (
<div>{state}</div>
)
或将回调传递给您的操作:
export const getInfo = createAction("GET_INFO", (callback) => {
return callback;
})
function* fetchInfo(action) {
const callback = action.payload;
const res = yield axios.get(URL).then((response) => response);
callback(res)
yield put({
type: 'FETCH_INFO',
payload: res
})
useEffect(() => {
dispatch(
getInfo((res) => {
console.log("State is ", state)
})) ;
}, [] );
}
我使用 Redux-Saga 从 API 获取数据,但当它更新状态时我无法使用它。这可能是因为我试图在数据加载到 redux 状态之前访问数据。
//saga.js
import axios from 'axios';
import { put, takeLatest, all } from 'redux-saga/effects'
const URL = "https://api.staging.gamerarena.com/disputes/";
function* fetchInfo() {
const res = yield axios.get(URL).then((response) => response);
yield put({
type: 'FETCH_INFO',
payload: res
})
}
function* actionWatcher() {
yield takeLatest('GET_INFO', fetchInfo)
}
export default function* rootSaga() {
yield all([
actionWatcher(),
]);
}
在上面,您可以看到 GET_INFO 触发了 fetch_info,但它会在所有其他操作之后更新状态。我尝试用 useEffect 修复它,但它没有帮助,或者我没有正确使用它。
const DisputeCard = (props) => {
const state = useSelector(state => state?.apiInfo?.apiInfo[0]?.results)
const dispatch = useDispatch()
useEffect(() => {
dispatch(getInfo()) ;
console.log("State is ", state) // state returns undefined in the console
}, [] );
是的,您无法在获取数据之前访问数据。您可以等待数据获取或将回调函数传递给您的操作。
使用另一个 useEffect 来等待获取数据,您可能还必须等待数据在您的组件内呈现。
const state = useSelector(state => state?.apiInfo?.apiInfo[0]?.results)
const dispatch = useDispatch()
useEffect(() => {
dispatch(getInfo()) ;
}, [] );
useEffect(() => {
if(state) {
console.log("State is ", state);
}
}, [state] );
if(!state) {
return null;
}
return (
<div>{state}</div>
)
或将回调传递给您的操作:
export const getInfo = createAction("GET_INFO", (callback) => {
return callback;
})
function* fetchInfo(action) {
const callback = action.payload;
const res = yield axios.get(URL).then((response) => response);
callback(res)
yield put({
type: 'FETCH_INFO',
payload: res
})
useEffect(() => {
dispatch(
getInfo((res) => {
console.log("State is ", state)
})) ;
}, [] );
}