【问题标题】:Assign JSON response to state React Native [duplicate]将 JSON 响应分配给状态 React Native [重复]
【发布时间】:2018-04-03 13:33:49
【问题描述】:

我正在使用 Laravel 和 React Native 来构建一个项目。我有一个发布请求,它在服务器端验证数据并返回错误。我想在状态声明的错误数组中分配错误响应。我的代码如下:

Laravel:

public function registerUser(Request $request) 
{
    $rules = [
        'username' => 'required', 
        'email' => 'required|email',
        'password' => 'required|min:5'
    ];

    $validator = \Validator::make($request->all(), $rules);

    if ($validator->fails()) {    
        return response()->json(['errors' => $validator->messages()]);
    }

    $user = User::create(request(['username', 'email', 'password']));

    return response()->json('success');
}

反应原生:

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(function (response) {
        var count = Object.keys(response.data.errors).length;
        if (count > 0) {
            console.log(response.data.errors);
            var newState = new Array(); 
            newState.push(response.data.errors);
            this.setState({
                errors: newState
            })
        }
    })
    .catch(function (error) {
        console.log(error);
    });

它在控制台显示以下错误:

undefined 不是函数(评估 'this.setState({errors: newState})') * app\components\Registration\RegistrationForm.js:51:18 in - node_modules\promise\setimmediate\core.js:37:14 在 tryCallOne - node_modules\promise\setimmediate\core.js:123:25 在 - ... 来自框架内部的另外 10 个堆栈帧

【问题讨论】:

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


    【解决方案1】:

    您需要正确绑定函数以获得正确的 this 上下文或使用已绑定到正确 this 上下文的 ES6 箭头函数

    检查下面的代码

    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.errors);
                var newState = new Array(); 
                newState.push(response.data.errors);
                this.setState({
                    errors: newState
                })
            }
        })
        .catch((error) => {
            console.log(error);
        });
    

    【讨论】:

      猜你喜欢
      • 2016-03-25
      • 2019-09-20
      • 2019-10-11
      • 2020-11-05
      • 2020-05-05
      • 2021-03-16
      • 2018-12-21
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多