RN

RN 总结-传值

2018-05-15  本文已影响0人  sy随缘

传值

一、当前界面:

1、初始化

state = {

    waiting: true,

    orderSort: '1',

    orderStatus: '0',

    cityId: '-1',

    data: [],

    cityList: [],

    refreshState: RefreshState.Idle,

  }

2、取值

this.state.orderSort,

this.state.orderStatus

3、 赋值

this.setState({ waiting: true })

this.setState({

            refreshState: page === 5 ? RefreshState.NoMoreData : RefreshState.Idle,

            data,

            waiting: false,

          })

4、请求示例:有取值赋值

api.getOrderList(JZGOrderType.JZGOrderTypeOnLine, '2', this.state.orderSort, this.state.orderStatus, operation, page, '', this.state.cityId)

      .then((res1) => {

        //  console.log('res1', res1)

        if (res1.status === 100) {

          const data = res1.AppraiseList || []

          callback(data, { allLoaded: false })

          this.setState({

            refreshState: page === 5 ? RefreshState.NoMoreData : RefreshState.Idle,

            data,

            waiting: false,

          })

        } else {

          Toast.show(res1.msg)

          callback([], { allLoaded: false })

          this.setState({

            refreshState: RefreshState.Failure,

            waiting: false,

          })

        }

      })

      .catch((error1) => {

        Toast.show(error1.message)

        callback([], { allLoaded: false })

        this.setState({

          refreshState: RefreshState.Failure,

          waiting: false,

        })

      })

  }

二、A界面—>B界面

1、 A传参数到B界面:

利用导航跳转传值:

某种事件触发操作,调用方法:

写法1:

onPress={() => navigate('UpdateName', {callBackName:this.onPressNameCallBack,name:this.state.name})}

或者,写法2:

onPress={this.onPressSex}

onPressSex = ()=>{

        console.log('性别点击。。。');

        const { navigate } = this.props.navigation;

        navigate('UpdateSex', {sex:this.state.sex})

 }

参数1:跳转的界面名字:UpdateName

参数2:是一个对象,可以携带多个key-value值

{callBackName:this.onPressNameCallBack,name:this.state.name}

callBackName:this.onPressNameCallBack

callBackName:A界面的回调方法,一般用于B界面返回到A界面时回传参数使用

this.onPressNameCallBack:A界面定义的回调方法,可以有参数

name:this.state.name

name:A界面传给B界面要使用的值

onPressNameCallBack = (item)=>{

        console.log('姓名点击回调。。。')

}

三、B界面—>A界面

B界面接收参数并调用A界面的回调方法:

1、定义局部变量,获取A界面的值

在render()方法或者自定义方法中定义变量,获取A界面的值

render() {

        console.log('this.props xxx', this.props.navigation)

        const { navigate } = this.props.navigation;

        const { params } = this.props.navigation.state;

        const { name, callBackName } = params;

}

2、定义全局变量,获取A界面的值

全局变量:当前类中全局可用,

static定义的:是类似于OC中的类方法,不能使用全局的变量

注意:

全局变量必须放到constructor系统方法中,同时,this.state初始化也必须放到constructor中

constructor(props) {

      super(props) //必须调用父类的方法

      const { navigate } = props.navigation;

      const { params } = this.props.navigation.state;

      const { name, callBackName } = params;

      this.callBackName = callBackName

      this.state = {

            orderSort: '1',

      }

    }

3、B界面调用回调方法

3.1 普通回调:

var item = {name:'李四'}

this.callBackName(item)

3.2 导航回调

由于导航按钮是定义在static中的,类似于OC中的类方法,不用使用this去调用方法,

所以需要先在生命周期方法【componentDidMount()】中将对象方法设置到Params中,

接着使用onPress={()=> navigation.state.params.onPushNew()方式调用

上一篇 下一篇

猜你喜欢

热点阅读