zoukankan      html  css  js  c++  java
  • react总结

      用react脚手架开发的项目,总结了一些经验和个人的看法

      1. 组件页面部分

        条件渲染:我个人比较喜欢在render函数里面,直接将页面的 html 部分全部写完,感觉这样的代码利于阅读,那个条件渲染部分就可以使用三目(三元)运算来做,这个写法其实也比较省事

              {  } 我们都知道,{} 里面放js代码,但是在 render 函数里面 return 中 if 条件语句是不能用的,但是三元运算可以用 { 条件?(  html标签  ):(  html标签 ) }

              给我的感觉就是 react 中的 html 部分需要大量的三元运算,包括 className style 的属性里面也是,尤其是与用户交互的时候

        案例:

        

         

        官方的案例中三元运算没有带() 其实还是加上() 好一些,因为 html 代码多了,通过()可以很清晰的看到条件语句包着的部分

        当然,如果说在一个render 函数里面写所有东西不好,还有一种方法就是在函数里面 return html标签,并且在函数里面没有 if 语句的限制,可以想怎么用怎么用

         

        这个是官方的案例,其实可以直接 {this.UserGreeting()} 来获取 return 的html标签,className style 加条件判断的话,只能用三元运算

        className 的写法

          <div className={'类名'  index == this.state.active ? 'active' :''}></div>

          <div className={`类名 ${index === this.state.active ? 'active' : ''}`}></div>

        style 的写法

          <div style={{color:'red',textAlign:'center'}}>Hello World!</div>   

       事件绑定的写法,react的事件绑定中有个 this 的指向问题,像 vue react 这种组件化开发,我们this通常要指向当前的组件

       两种写法:核心技术 es6 的箭头函数

        

          

         哪种都行,因为 es6 的箭头函数,用 bind 改变this的时代已经过去了

        事件传参:第二个截图为例:onClick={ (e) => this.handleClick(11,e) }

              handleClick(a){ console.log(a) }    // 11

      好了,页面的部分我们就说完了,如果有欠缺的部分,以后在补充,不过目前这些东西已经够正常的页面开发了

      下面我们来说说路由  react-router-dom 

      为啥没有说 react-router ,因为 react-router-dom 包含了 react-router的功能,不过下载 npm 包的时候,是需要两个包一起下载的

      主要说的组件有:BrowserRouter  HashRouter  Link NavLink Switch exact Route withRouter

      BrowserRouter:history 路由:通常要包含 App 最大的那个组件

      HashRouter : hash 路由:通常要包含 App 最大的组件;这两种路由方式要 二选一 

      Switch:Switch 切换路由的组件,这个是精准匹配的 ,某些情况与 Route组件中 exact 属性配合使用,是属于配置路由里面的

      Route:是配置路由的组件

      Link:相当于 a 连接,用于跳转

      NavLink:特殊的a连接,可以绑定一下自定义样式

      witchRouter:如有通过网址进行的跳转,有可能跳转的那个页面没有路由的对象,所以我们有些时候需要用 withRouter将组件包起来

      

       

      接下来聊聊 redux 的状态容器

      redux的操作很简单:

       通过  let store = createStore(renduer) 创建一个对象,将一个对象暴露出去让页面使用

       页面 通过 store 便可以有 store 的方法,可以使用,getState() 获取 state 的数据,dispatch() 像 renduer 中提交事件,对形参有要求,要 action 的格式,必须要有type属性

       所以 renduer 这个函数就显得很关键

       function renduer( state , action ){    // state 就是redux的状态容器,也就是存放数据的地方,页面上无法更改里面的数据,只能通过 dispatch 来提交到 renduer 中来

         switch(action.type){

          case:    这个就是页面通过dispatch(action 对象中的type 类型,也可以通过 action 来获取页面上传过来的数据)

            对数据进行操作

            return state;

          default:

            return state;

         } 

         }

      这个函数就是来处理数据的地方

      接下来,我们重新的看这个代码: let store = createStore(renduer)   

      然后我们来说说 react-reduex 这个包

      这个包的作用也很明显,就是将 组件和 redux 结合起来,了解他的作用,我们来看看这个代码

      

      

       

       Provider 这个组件的作用也很明显,通过上下文,来让所有的组件都拥有 store 的对象,这样组件也可以调用 store 的方法

       store.subscribe() 这个方法用来,如果 renduer 中的 state 发生了改变,便可以动态的改变页面的state值

      最后聊聊 redux-thunk 这个异步的中间件,这个中间件对 dispatch 进行了增强,可以使 dispatch 可以在 return 一个回调函数,回调函数中有一个形参dispatch,进行异步操作,通过这个dispatch来像renduer中进行请求 

      let store = createStore(renduer,applyMiddleware(thunk));   // 第二个参数就是中间件,这样的返回一个 store 的对象

      使用方法也很简单

      

      

       

       

      

      最后说一点语法糖

      

      import store from '../../store/reduer';

        

       页面获取数据和发送dispatch的优化

       官网的案例:

        

      const mapStateToProps = (state, ownProps) => {
        return {
          active: ownProps.filter === state.visibilityFilter
        }
      }
    
      const mapDispatchToProps = (dispatch, ownProps) => {
        return {
          onClick: () => {
            dispatch(setVisibilityFilter(ownProps.filter))
          }
        }
      }
    
      const FilterLink = connect(
        mapStateToProps,
        mapDispatchToProps
      )(Link)

      

        

  • 相关阅读:
    最新版-Python和Java实现Aes相互加解密
    tasker 实现短信监听和转发 解决短信验证码登录问题
    某宁 价格爬取 python
    python 获取 某东商品评论数
    xpath 使用
    frida hook 重载函数的几种写法
    Python 爬虫遇到形如 &#x5c0f;&#x8bf4; 的编码如何转换为中文?
    python 使用 pymysql 存,改dic类型数据
    Excel甘特图制作
    关于sunlike ERP的问题解决集
  • 原文地址:https://www.cnblogs.com/shangjun6/p/13462090.html
Copyright © 2011-2022 走看看