Javascript Redux:对象作为React子对象无效(找到:[对象承诺])
我使用react、redux和axios制作这个应用程序,其中一个组件显示完整的地址列表,下一个组件显示一个选定的地址。地址列表组件工作正常,但单视图组件出现问题,返回以下错误: 在涉及changeSelected->address的redux链中,有一个承诺被发送,而不是承诺的结果。我很难确定这一点,因为我在多地址视图fetchAddresses->addresses中使用了类似的结构,效果很好 这是我的反应组件Javascript Redux:对象作为React子对象无效(找到:[对象承诺]),javascript,reactjs,redux,use-effect,Javascript,Reactjs,Redux,Use Effect,我使用react、redux和axios制作这个应用程序,其中一个组件显示完整的地址列表,下一个组件显示一个选定的地址。地址列表组件工作正常,但单视图组件出现问题,返回以下错误: 在涉及changeSelected->address的redux链中,有一个承诺被发送,而不是承诺的结果。我很难确定这一点,因为我在多地址视图fetchAddresses->addresses中使用了类似的结构,效果很好 这是我的反应组件 const Card = async (props) => { c
const Card = async (props) => {
const { changeSelected,address } = props
console.log(address)
useEffect(() => {
changeSelected(1);
},[changeSelected(1)])
if (!address){
return <h1>No results</h1>
} else {
return (
<React.Fragment>
<CssBaseline />
<Container maxWidth="sm">
<Typography component="div" style={{ backgroundColor: '#cfe8fc', height: '100vh' }} >
<Typography variant="h6" >{address.body}</Typography>
</Typography>
</Container>
</React.Fragment>
);
}
}
Card.propTypes = {
changeSelected: PropTypes.func.isRequired,
address: PropTypes.object.isRequired,
}
const mapStateToProps = state => ({
address: state.address.address,
})
export default connect(mapStateToProps, {changeSelected})(Card)
这是我的减速机
//create initial state
const initialState = {
addresses: [],
address:{}
}
export default (state = initialState, action) => {
switch(action.type) {
case FETCH_ADDRESSES:
return{
...state,
addresses: action.payload
}
case CHANGE_SELECTED:
return{
address: action.payload
}
default:
return state
}
}
响应正在发送到reducer,但在返回承诺之前调用了错误消息。结果表明问题在于将react组件卡指定为async。摆脱了它,它工作得很好。什么是address.body类型?它应该是stringshould,你能控制台吗?确实要注销吗?或者它也引用的对象是什么?理论上,它应该从状态中的地址字段返回,该字段最初是一个空对象,但应该用地址填充。从axios收集的数据对象是{userid:[int],id:[int],body:[string]}如果我console.log地址。它在那里生成的减速器中的数据,但是如果我在组件中输入console.log地址,那么在一切都中断之前,我只会得到一个空对象
//create initial state
const initialState = {
addresses: [],
address:{}
}
export default (state = initialState, action) => {
switch(action.type) {
case FETCH_ADDRESSES:
return{
...state,
addresses: action.payload
}
case CHANGE_SELECTED:
return{
address: action.payload
}
default:
return state
}
}