React學習隨筆-讀阮一峰教程有感


  跟隨阮一峰的React入門學習,把里面的代碼down下來,然后一個個demo去嘗試,修改

demo1-React.render

  1 ReactDOM.render() 方法 接受兩個入門參數,第一個是需要插入的節點,第二個插入的父節點

demo2 -JSX

  1 JSX的基本語法 遇到{以js語法解析,<以html語法解析

  2 html的數組會被遍歷生成html 如下,會被正確執行,生成兩個div      

ReactDOM.render(
        <div>
        {
          // names.map(function(name){
          //   return <div>Hi, {name}</div>
          // })
          [<div>wiki</div>,<div>jack</div>]
        }
        </div>,
        document.getElementById('example')
      );

  3 將里面的數組改成<div>wiki</div><div>jack</div>,會直接報錯,也不支持return這樣的語句

  4 即然數組可以,那試試對象-將里面的數據改成{div: 'wiki'} Invariant Violation: Objects are not valid as a React child (found: object with keys {div}). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons.  翻譯一下吧:{div}這樣的object不能作為React的child,必須使用數組或者React構造方法生成的對象

 demo4 - 組件,上面的使用React的構建對象的方法,

  1 React.createClass 提供了上面構造方法,可以理解成new 一個ReactChild這樣的類,需要實現render這個接口,沒有實現的話 Uncaught Error: Invariant Violation: createClass(...): Class specification must implement a `render` method.

  2 通過<ClassName> 這樣的html標簽式的調用,同時定義標簽上面的屬性,會自動帶到ClassName.props屬性里面,再看看屬性里面能不能插入對象屬性

    

var HelloMessage = React.createClass({
        render: function() {
          return <h1>Hello {this.props.arr[0]} {this.props.ob.key}</h1>;
        }
      });

      ReactDOM.render(
        <HelloMessage name="John" arr={['a1', 'a2']} ob={{key: 'value'}} />,
        document.getElementById('example')
      );

經過上面代碼驗證,props屬性里面是可以保存對象屬性的

   3 html標簽里面class要寫成className, for要寫成htmlFor,這個試了下,代碼不會生效,但是控制台會有error的提醒

   4 上面列出來的代碼會變成4個span標簽,現在看是會根據html的標簽里的空格進行分隔,{}里面的空格不會被分割--有待后續了解原因

 

 

demo5-pros.children--閉合標簽內部的元素

  1 一般pros屬性和自定義標簽的屬性一一對應,children屬性,遍歷this.pros, 如果是html標簽  Each child in an array or iterator should have a unique "key" prop. Check the render method of `NotesList`. See https://fb.me/react-warning-keys for more information,大概是缺少data-reactid這個唯一的屬性,如果是array數組,依舊有上面的error提示,好吧,改成React.Children.map(this.props.children,function(){.. })方法,如果是{key:'world'},無論上面哪種遍歷都會報錯,對象不能ReactElment

 

 

demo5 -propTypes --驗證pros對象內屬性的類型和合法性

  1 用控制台查看一下React.proTypes屬性,圖列在這里了,有什么需要可以去查API或者直接到控制台看方法

  2 有React自帶的,那自然有自定義的驗證方法,這個還是上官網看到的,就不詳細說了

 

demo7 -- 獲取真實dom-this.refs屬性    

  1 React的虛擬dom節點,可以通過給插入進頁面的dom元素加入ref屬性,返回的是dom對象,而不是像jquery那樣封裝過的dom對象

  2 dom的事件屬性綁定,直接到屬性里面加入onClick方法,可查看官方API-http://facebook.github.io/react/docs/events.html#supported-events,支持的事件比較多,竟然還有copy這樣的,猜測大概是通過綁定key-up這樣綁定的

 

 

demo8 -- 與用戶互動  this.state屬性, pros更側重於靜態不變化的數據,state更多用來保存state屬性

  1 事例,修改了state屬性之后,用state生成的text字符串也發生了改變,類似angular的雙向綁定處理。--查看實現原理

  2 通過getInitialState設置初始狀態,建議將需要的state在init方法里面,把組件看成的不同表現形式看成不同的狀態形式,假設沒有getInitialState方法,則會直接報Uncaught TypeError: Cannot read property 'liked' of null ,看來是React生成的對象里面默認沒有stat屬性

 

 

demo9 -- 與綁定表單事件關聯,原來React不能像Angular那樣雙向綁定

  1 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM