Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux:对象作为React子对象无效(找到:[对象承诺])_Javascript_Reactjs_Redux_Use Effect - Fatal编程技术网

Javascript Redux:对象作为React子对象无效(找到:[对象承诺])

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

我使用react、redux和axios制作这个应用程序,其中一个组件显示完整的地址列表,下一个组件显示一个选定的地址。地址列表组件工作正常,但单视图组件出现问题,返回以下错误:

在涉及changeSelected->address的redux链中,有一个承诺被发送,而不是承诺的结果。我很难确定这一点,因为我在多地址视图fetchAddresses->addresses中使用了类似的结构,效果很好

这是我的反应组件

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
    }
}