用于在React-Native中处理服务调用的通用基类方法

时间:2017-02-09 19:01:06

标签: javascript android ios react-native ecmascript-6

:定位:
一个调用web服务的泛型方法,我的Network类显示spinner同时删除它一旦完成,然后最终通过显示警告处理错误,否则将响应发送回我的调用类。

我做了什么: 我已经编写了以下方法,即在我的基类中,所有类都将使用此方法。

问题: 当调用setState时,会更新屏幕,因此任何警报(错误/成功)会出现一段时间,然后最后一个屏幕出现在前面,并且当警报在屏幕后面时,每个事物都会卡住。

需要: 任何人都可以指出我在做什么错误或任何概念如何处理这个。

import React, { Component } from 'react'
import { View } from 'react-native'
import Network from './Network';

export default class BaseClass extends Component {
   constructor() {
      super()
      this.state = {
         spinner:false,
         response:''
      }
   }

  onPress(data){
      this.setState({ spinner: true })

      var net = new Network();
      net.makeCall(data,function(context,err,res){
      context.setState({ spinner: false })

      if(err!= null){
       alert('error')
      }
      else{
         alert('sccess')
      }
      )
     }
}

第二种方法 我采用了第二种方法,但在这里得到了相同的结果。

import React, { Component } from 'react'
    import { View } from 'react-native'
    import Network from './Network';

    export default class BaseClass extends Component {
       constructor() {
          super()
          this.state = {
             spinner:false,
             response:''
          }
       }

      onPress(data){
          this.setState({ spinner: true })

          var net = new Network();
          net.makeCall(data,function(context,err,res){
          context.setState({ spinner: false })

          if(err!= null){
           context.setState({ response: err })
          }
          else{
             context.setState({ response: data })
          }
          )
       }

    componentDidUpdate(){
    alert(this.state.response)
    }
    }

1 个答案:

答案 0 :(得分:0)

我目前的工作班,很少有类是自定义类,如Screens,SessionManager,SessionTimer,Constants

Context c;
......
protected void onCreate(Bundle savedInstanceState) {
        ...
        c = this;
        ...
}
......
class Task extends AsyncTask<Void,Void,Void>{
.......
        @Override
        protected void onPostExecute(Void aVoid) {
            mProgress.dismiss();
            Toast.makeText(c, "Alert Posted", Toast.LENGTH_LONG).show();
            //OR
            Toast.makeText(getApplicationContext(), "Alert Posted", Toast.LENGTH_LONG).show();
        }
    }