Javascript 当我使用reactnative时,如何在useEffect中使用async Wait?
执行useffect时,我希望通过异步存储获取令牌,然后通过axios.post('/auth/me')路由器获取数据值,并使用disaptch执行KAKAOLOG_IN_请求操作 使用console.log检查数据值后,数据值显示良好。但是当我运行我的代码时,就会发生这个错误Javascript 当我使用reactnative时,如何在useEffect中使用async Wait?,javascript,node.js,reactjs,react-native,Javascript,Node.js,Reactjs,React Native,执行useffect时,我希望通过异步存储获取令牌,然后通过axios.post('/auth/me')路由器获取数据值,并使用disaptch执行KAKAOLOG_IN_请求操作 使用console.log检查数据值后,数据值显示良好。但是当我运行我的代码时,就会发生这个错误 Possible Unhandled Promise Rejection (id: 1): Error: Actions may not have an undefined "type"
Possible Unhandled Promise Rejection (id: 1):
Error: Actions may not have an undefined "type" property. Have you misspelled a constant?
Error: Actions may not have an undefined "type" property. Have you misspelled a constant?
如何修复我的代码
这是我的密码
(index.js)
(reducer/index.js)
(src/index.js)
import{KAKAOLOG_IN_REQUEST}来自“../sagas/user”;
常量App=({})=>{
const dispatch=usedpatch();
useffect(()=>{
异步函数fetchAndSetUser(){
试一试{
const token=await AsyncStorage.getItem('tokenstore');
const{data}=wait axios.post(
“/auth/me”,
{},
{
标头:{授权:`Bearer${token}`,
},
);
console.log('data:data',data);
派遣({
键入:“KAKAOLOG_IN_REQUEST”,
数据:数据,
});
}捕获(错误){
}
}
fetchAndSetUser();
}, []);
返回;
};
导出{App};
问题
错误消息表示您的代码可能会抛出错误,但未处理该错误。它还表示请求中的KAKAOLOG\u
由于某种原因未定义(可能是您忘记导入它,或者它实际上是一个字符串)
解决方案
将异步代码环绕在try/catch
中。在请求中定义KAKAOLOG\u
或作为字符串传递“KAKAOLOG\u请求”
请求从哪里来?它是以正确的方式进口的吗?谢谢,它很有效!!!!!但我想知道。。。KAKAOLOG_IN_请求是在发生错误时导入的。然而,当我将其更改为“KAKAOLOG_IN_REQUEST”时,它工作正常。我好奇的是,在其他情况下,KAKAOLOG_in_请求工作得很好,但为什么“KAKAOLOG_in_请求”在这部分工作?@user15322469 Dunno,也许你混淆了命名vs默认导出/导入?如果你分享你的代码,我可以帮你解释一下,你是如何在请求中导出和导入
KAKAOLOG\u的。我更新了我的帖子!我发布了我的代码(:@user15322469,所以我看到一个命名的importimport{KAKAOLOG_IN_REQUEST}来自“../sagas/user”;
。KAKAOLOG_IN_REQUEST
是如何从“../sagas/user”导出的?嗯……它没有成功……但是谢谢!
const App = ({}) => {
const dispatch = useDispatch();
useEffect(() => {
async function fetchAndSetUser() {
const token = await AsyncStorage.getItem('tokenstore', (err, result) => {
});
var {data} = await axios.post(
'/auth/me',
{},
{
headers: {Authorization: `Bearer ${token}`},
},
);
console.log("data:",data);
dispatch({
type: KAKAOLOG_IN_REQUEST,
data: data,
});
}
fetchAndSetUser();
}, []);
return <Navigator />;
};
export {App};
import {
KAKAOLOG_IN_FAILURE,
KAKAOLOG_IN_REQUEST,
KAKAOLOG_IN_SUCCESS,
} from '../reducers/user';
function* watchkakaoLogIn() {
yield takeLatest(KAKAOLOG_IN_REQUEST, kakaologIn);
}
function* kakaologIn(action) {
try {
// const result = yield call(kakaologInAPI, action.data);
yield put({
type: KAKAOLOG_IN_SUCCESS,
data: action.data,
});
} catch (err) {
console.error(err);
yield put({
type: KAKAOLOG_IN_FAILURE,
error: err.response.data,
});
}
}
export default function* userSaga() {
yield all([
fork(watchkakaoLogIn),
]);
}
import { combineReducers } from 'redux';
import user from './user';
import post from './post';
// (이전상태, 액션) => 다음상태
const rootReducer = (state, action) => {
switch (action.type) {
// case HYDRATE:
// // console.log('HYDRATE', action);
// return action.payload;
default: {
const combinedReducer = combineReducers({
user,
post,
});
return combinedReducer(state, action);
}
}
};
export default rootReducer;
import {KAKAOLOG_IN_REQUEST} from '../sagas/user';
const App = ({}) => {
const dispatch = useDispatch();
useEffect(() => {
async function fetchAndSetUser() {
try {
const token = await AsyncStorage.getItem('tokenstore');
const {data} = await axios.post(
'/auth/me',
{},
{
headers: {Authorization: `Bearer ${token}`},
},
);
console.log('data::::::', data);
dispatch({
type: 'KAKAOLOG_IN_REQUEST',
data: data,
});
} catch (error) {
}
}
fetchAndSetUser();
}, []);
return <Navigator />;
};
export {App};
useEffect(() => {
async function fetchAndSetUser() {
try {
const token = await AsyncStorage.getItem('tokenstore');
const {data} = await axios.post(
'/auth/me',
{},
{
headers: { Authorization: `Bearer ${token}` },
},
);
console.log("data:",data);
dispatch({
type: 'KAKAOLOG_IN_REQUEST',
data: data,
});
} catch(error) {
// handle error, logging, etc...
}
}
fetchAndSetUser();
}, []);