【发布时间】:2023-02-21 17:51:42
【问题描述】:
当用户登录时,我可以获得以下 Json 数据。
杰森
{
"hubs": [
"111.com",
"222.com",
"333.com",
}
下面的代码部分
console.log(response.data.hubs[0])
console.log(response.data.hubs[1])
console.log(response.data.hubs[2])
我可以看到这样的网址
"111.com", "222.com", "333.com",
在控制台中。
但是,我使用 dispatch、stores 和 useSelector,我得到了这样的错误。
我不知道为什么会出现错误。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
登录.js
const Login = () => {
const history = useHistory();
const dispatch = useDispatch();
const [cookies, setCookie] = useCookies();
const { register, handleSubmit, watch, errors } = useForm();
const getJwt = async (data) =>{
const email_encoded = btoa(data.email)
const password_encoded = btoa(data.password)
await axios.get('xxx.com', {
auth: {
username: data.email,
password: data.password,
}
})
.then(function (response) {
console.log("logged in!");
setCookie('accesstoken', response.data.token, { path: '/' }, { httpOnly: true });
setCookie('refreshtoken', response.data.refresh_token, { path: '/' }, { httpOnly: true });
console.log(response.data.hubs[0])
console.log(response.data.hubs[1])
console.log(response.data.hubs[2])
dispatch(setMCUHouse(response.data.hubs[0]));
dispatch(setMCUCondo(response.data.hubs[1]));
dispatch(setMCUOffice(response.data.hubs[2]));
})
.catch(err => {
console.log("miss");
alert("Email or Password is wrong!");
});
};
return (
<>
<form onSubmit={handleSubmit(getJwt)}>
<input placeholder='Email Address' className='form-control login_form' {...register('email')} />
<div className="login_password_section">
<input placeholder='Password' className='form-control login_form' />
<span
onClick={togglePassword}
role="presentation"
className="password_reveal"
>
</span>
</div>
</form>
</>
);
}
export default Login;
商店/mcu.js
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
mcuhouse: '',
mcucondo: '',
mcuoffice: '',
};
const slice = createSlice({
name: "mcu",
initialState,
reducers: {
setMCUHouse: (state, action) => {
return Object.assign({}, state, { mcuhouse: action.payload })
},
setMCUCondo: (state, action) => {
return Object.assign({}, state, { mcucondo: action.payload })
},
setMCUOffice: (state, action) => {
return Object.assign({}, state, { mcuoffice: action.payload })
},
}
});
export default slice.reducer;
export const { setMCUHouse, setMCUCondo, setMCUOffice, } = slice.actions;
DiscoverCondo.js
const url = useSelector(state => state.mcu.mcucondo);
console.log(url)
【问题讨论】:
-
我没有看到任何明显的问题。认为你可以创建一个跑步codesandbox 重现我们可以现场检查的问题的演示?
-
问题出现由这条线引起:
const url = useSelector(state => state.mcu.mcucondo);(你没有包含完整的DiscoverCondo文件代码,所以我们无法判断第 46 行是什么).您能否edit 帖子分享更完整的minimal reproducible example,其中包括DiscoverCondo并显示您如何配置商店,即如何将 reducer 组合起来形成状态树? -
谢谢你的评论。第 46 行是 const url = useSelector(state => state.mcu.mcucondo);
-
那么
state.mcu似乎是未定义的。你能分享一下你是如何组合减速器和配置商店的吗? -
如果我误解了什么,对不起,你的意思是 setMCUCondo: (state, action) => { return Object.assign({}, state, { mcucondo: action.payload }) },?