【问题标题】:Assigned response data show [object object] React Native分配的响应数据显示 [object object] React Native
【发布时间】:2018-04-03 22:12:14
【问题描述】:

我在迭代从服务器端 (Laravel) 获得的验证错误时遇到问题。我可以获得错误响应并在状态错误数组中分配。但是当我 console.log 显示状态时,它显示了我 [obeject object]。所以我无法迭代数组。你们可以帮忙吗?

constructor(props){
        super(props);
        this.state={
            userName:'',
            userEmail:'', 
            userPassword:'',
            errors:[]               
        }
    }

axios({
            method: 'post',
            url: API_URL+'signup',
            data: {
                username: userName,
                email: userEmail,
                password: userPassword
            }
        })
        .then((response) => {
            var count = Object.keys(response.data.errors).length;
            if (count > 0) {
                console.log(response.data);
                var newState = []; 
                newState.push(response.data);
                this.setState({
                    errors: newState
                })
            }

            console.log("error = " + this.state.errors); // console output: error = [object Object]
        })
        .catch((error) => {
            console.log(error);
        });

// 在渲染函数中我已经完成了以下代码来显示验证错误

render() {
    <Errors errors={this.state.errors} />
}

const Errors = (props) => {
    return (
        <View>{props.errors.map((error, i) => <Text key={i}>{error}</Text>)}</View>
    );
}

【问题讨论】:

    标签: javascript json reactjs laravel-5 react-native


    【解决方案1】:

    与您的问题无关,但对我来说这是一个非常可悲的原因 为什么它显示为 [Object Object]。请参阅下面的区别。

    componentWillReceiveProps(nextProps) {       
       console.log("Data"+nextProps.payload.payloadData); // Display [Object Object]
       console.log(nextProps.payload.payloadData);  //  Display proper list
    }
    

    【讨论】:

    • 这个答案值得更多的支持!谁能解释为什么对象道具不能与字符串结合在一起?
    【解决方案2】:

    不应该是newState.push(response.data.errors) 而不是newState.push(response.data) 吗?

    另外,打印JSON对象时,需要使用JSON.stringify。所以console.log(JSON.stringify(this.state.errors)) 会以可读的string 格式显示JSON

    【讨论】:

    • 是的,现在我更新:newState.push(JSON.stringify(response.data.errors));和 console.log(this.state.errors) ...它工作正常。但是状态更新时不会在视图中显示错误。 @Lingaraju E V
    • 你能给我看一个来自AJAX 请求的响应示例吗?您是否将newState.push(response.data) 更新为newState.push(response.data.errors)?我假设response.data.errorsArray
    • 您好,我已经更新了您的代码。请检查一下。怀疑您的response.data.errors 不是Array。所以你不能只在上面使用Array.map。我使用Object.keys 枚举了errors 对象中的所有keys 并打印了它们各自的error 消息。 paste.laravel.io/90b7baa5-09d4-4c6e-9bab-dc006fe20737
    • 非常感谢。但是您在 then() 中的更改而不只是分配是行不通的。它在控制台中显示“error = [object Object]”。我已将状态错误声明为数组。您可以在我上面的代码中看到。并且 UI 不会因任何更改而更新。
    猜你喜欢
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多