react如何获取state的值并更新使用

这篇文章主要介绍了react如何获取state的值并更新使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

react获取state值并更新使用

react获取state的值并且修改分为两种情况:

在视图层处理

//在 state 中饭设置初始值 state={       name:'',       age:''  } //通过 控制一个事件触发然后setState 去设置 setName=()=>{     this.setState({        name     }) }

在model层处理

view层

  //前端通过dispatch 去调用changeTab 接口   onTabsChange = (key) => {       this.props.dispatch({       type: `${this.module}/changeTab`,         payload: key     });   }

model层:

const moduleName = 'mayouchen'; let defaultState = {   activeTabKey: "1" }; export default {   namespace: moduleName,   state: {     moduleName: moduleName,     defaultState,     ...defaultState }, effects: {  * changeTab({ payload, }, { call, put, select }) {          // 更新  activeTabKey          yield put({          type:'updateActiveTabKey',          payload        });        // 更新完  activeTabKey  就可以使用  activeTabKey 更新后的值        yield put({type: 'getDataByTab'});  },   * getDataByTab({payload }, { call, put, select }) {          let { activeTabKey } = yield select(state => state[moduleName]);         //切换TAB调用不同接口         if(activeTabKey == "1") {  //商户信息           yield put({type:'businessInformation', payload: {}});         } else if (activeTabKey == "2" ) {  //审批信息           yield put({type:'approvalInformation', payload: {}})         }else if (activeTabKey == "3" ) {         }     },     * businessInformation ({payload, }, { call, put, select }) {      const result = yield call(read, payload);      if (result ) {        let { data } = result ;        yield put({ type: 'getBusinessInformationData', payload: {...data }});      }      else {        message.error(`获取信息失败:${entityRes.globalError}`);      }   } }  reducers: {      updateActiveTabKey(state, action) {       return {         ...state,         activeTabKey: action.payload       };     } }

react中state基本使用

有状态组件和无状态组件

  • 函数组件又叫做 无状态组件,类组件又叫做 有状态组件
  • 状态( state )即 数据
  • 函数组件没有自己的状态,只负责数据展示(静)
  • 类组件有自己的状态,负责更新Ul,让页面“动”起来

比如计数器案例中,点击按钮让数值加1。0和1就是不同时刻的状态,而由0变为1就表示状态发生了变化。状态变化后,UI也要相应的更新。React中想要实现该功能,就要使用有状态组件来完成。

state的基本使用

  • 状态( state )即数据,是组件内部的私有数据,只能在组件内部使用
  • state的值是对象,表示一个组件中可以有多个数据
  • 通过 this.state 来获取状态

class App extends React.Component { // constructor() { //     super() //     // 初始化state //     this.state = { //         count: 0 //     } // } // 简化语法初始化state  【推荐】 state = { count: 0, } render() { return( 

计数器:{this.state.count}

) } } // 渲染组件 ReactDOM.render(, document.getElementById("root"))

setState修改状态

  • 状态是可变的
  • 语法:this.setState({ 要修改的数据 })
  • 注意:不要直接修改 state 中的值,这是错误的!!!
  • setState() 作用:1. 修改state 2. 更新UI
  • 思想:数据驱动视图

class App extends React.Component { // 简化语法初始化state  【推荐】 state = { count: 0, } render() { return( 

计数器:{this.state.count}

) } } // 渲染组件 ReactDOM.render(, document.getElementById("root"))

从JSX中抽离事件处理程序

  • JSX中掺杂过多JS逻辑代码,会显得非常混乱
  • 推荐:将逻辑抽离到单独的方法中,保证JSX结构清晰

  • 原因:事件处理程序中 this的值为undefined
  • 希望:this 指向组件实例( render方法中的this即为组件实例)

事件绑定this指向

1. 箭头函数

  • 利用箭头函数自身不绑定 this 的特点
  • render() 方法中的 this 为组件实例,可以获取到 setState()

2. Function.prototype.bind()

利用 ES5 中的 bind() 方法,将事件处理程序中的 this 与组件实例绑定到一起

class App extends React.Component { constructor() { super() this.state = { count: 0, } this.onIncrement = this.onIncrement.bind(this) } // 事件处理程序 onIncrement() { console.log('事件处理程序中的this:', this) this.setState({ count: this.state.count + 1 }) } render() { return( 

计数器:{this.state.count}

) } } // 渲染组件 ReactDOM.render(, document.getElementById("root"))

3. class的实例方法

  • 利用 箭头函数 形式的 class实例 方法
  • 注意∶该语法是实验性语法,但是,由于 babel 的存在可以直接使用

class App extends React.Component { state = { count: 0, } // 事件处理程序 onIncrement = ()=> { console.log('事件处理程序中的this:', this) this.setState({ count: this.state.count + 1 }) } render() { return( 

计数器:{this.state.count}

) } } // 渲染组件 ReactDOM.render(, document.getElementById("root"))

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是react如何获取state的值并更新使用的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » JavaScript 教程