<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        回顧Javascript React基礎

        來源:懂視網 責編:小采 時間:2020-11-27 21:55:06
        文檔

        回顧Javascript React基礎

        回顧Javascript React基礎:前言 React核心的單向數據流、一切皆數據的state、不會改變的props,以及狀態提升等等經常使用便不多總結,需要的看官方文檔。 JSX JSX 本質只是為 React.createElement(component, props, ...children)提供的語法糖! 1.React DO
        推薦度:
        導讀回顧Javascript React基礎:前言 React核心的單向數據流、一切皆數據的state、不會改變的props,以及狀態提升等等經常使用便不多總結,需要的看官方文檔。 JSX JSX 本質只是為 React.createElement(component, props, ...children)提供的語法糖! 1.React DO

        前言

        React核心的單向數據流、一切皆數據的state、不會改變的props,以及狀態提升等等經常使用便不多總結,需要的看官方文檔。

        JSX

        JSX 本質只是為 React.createElement(component, props, ...children)提供的語法糖!

      1. 1.React DOM 在渲染之前都被轉換成了字符串,它天生自帶防止 XSS 攻擊的屬性。
      2. 2.Babel 轉譯器會把 JSX 轉換成一個名為 React.createElement()的方法調用。在線babel編譯
      3. 以下兩段代碼等價(許多react的界面設計器通過這個原理,達到元數據轉化React元素,實現界面化編程!)
        嵌套就是多個create方法的嵌套。

        function hello() {
        return <div className="red">Hello,<span>world!</span></div>;
        }
        "use strict";
        function hello() {
        return React.createElement(
        "div",
        { className: "red" },
        "Hello,",
        React.createElement(
        "span",
        null,
        "world!"
        )
        );
        }

      4. 3.JSX中的屬性是可以任何 {} 包裹的 JavaScript 表達式作為一個屬性值,不能使用if和for。
      5. 需要循環和條件渲染可以使用map、三目,或者使用if/for在jsx代碼之外!

        //錯誤的!
        class A extends React.Component {
        render() {
        return <div>{if(){}else{}}</div>;//原來還蒙蔽的不知道為什么錯了0.0
        }
        }

        React.Component (組件)

        創建組件的四種方式:

        React.Component 方式

        class Greeting extends React.Component {
        render() {
        return <h1>Hello, {this.props.name}</h1>;
        }
        }

        ES5

        var createReactClass = require('create-react-class');
        var Greeting = createReactClass({
        render: function() {
        return <h1>Hello, {this.props.name}</h1>;
        }
        });
        //或者使用react
        var Greeting = React.create({
        render: function() {
        return <h1>Hello, {this.props.name}</h1>;
        }
        });

        函數式

        const Button = ({
        day,
        increment
        }) => {
        return (
        <div>
        <button onClick={increment}>Today is {day}</button>
        </div>
        )
        }

        PureComponet

        大多數情況下, 我們使用PureComponent能夠簡化我們的代碼,并且提高性能,但是PureComponent的自動為我們添加的shouldComponentUpate函數,只是對props和state進行淺比較(shadow comparison),當props或者state本身是嵌套對象或數組等時,淺比較并不能得到預期的結果,這會導致實際的props和state發生了變化,但組件卻沒有更新的問題。當然還是有解決的方法的,所以建議還是少用。

        事件處理

        事件綁定的四種方法:推薦使用第一第二種。

        class Toggle extends React.Component {
        constructor(props) {
        {...}
        //方法一必須在這里綁定
        this.handleClick1 = this.handleClick.bind(this);
        }
        handleClick1() {
        this...
        }
        //方法二使用【屬性初始化器語法】【需要開啟babel stage-0以上】
        handleClick2=()=> {
        this...
        }
        render() {
        return (
        <div>
        <button onClick={this.handleClick1}></button>
        <button onClick={this.handleClick2}></button>
        //方法三在使用時綁定
        <button onClick={this.handleClick1.bind(this)}></button>
        //方法四在回調函數中使用 箭頭函數
        /**
        渲染的時候都會創建一個不同的回調函數。在大多數情況下,這沒有問題。然而如果這個回調函數作為一個屬性值傳入低階組件,這些組件可能會進行額外的重新渲染。我們通常建議在構造函數中綁定或使用屬性初始化器語法來避免這類性能問題。
        **/
        <button onClick={(e) => this.handleClick1(e)}></button>
        </div>
        );
        }
        }

        組合 vs 繼承

        在React中不推薦使用繼承,不推薦繼承自定義Component。

        //不推薦使用
        class Parent extends React.Component {
        render() {
        return <div>...</div>;
        }
        }
        class A extends Parent {
        render() {
        return <div>...</div>;
        }
        }
        //推薦使用
        class A extends React.Component {
        render() {
        return <Parent>...</Parent>;
        }
        }

        不使用 ES6

      6. Component || create
      7. defaultProps || getDefaultProps
      8. constructor state || getInitialState
      9. this bind || 不需要
      10. class Greeting extends React.Component {
        constructor(props) {
        super(props);
        this.state = {count: props.initialCount};
        this.handleClick = this.handleClick.bind(this);
        }
        handleClick() {
        alert(this.state.message);
        }
        render() {
        return <h1 onClick={this.handleClick}>Hello, {this.props.name}</h1>;
        }
        }
        Greeting.defaultProps = {
        name: 'Mary'
        };
        var createReactClass = require('create-react-class');
        var Greeting = createReactClass({
        getInitialState: function() {
        return {count: this.props.initialCount};
        },
        getDefaultProps: function() {
        return {
        name: 'Mary'
        };
        },
        handleClick: function() {
        alert(this.state.message);
        },
        render: function() {
        //組件中的方法會自動綁定至實例,不需要像上面那樣加 .bind(this)
        return <h1 onClick={this.handleClick}>Hello, {this.props.name}</h1>;
        }
        });

        Refs

        1.如果可以通過聲明式實現,則盡量避免使用 refs。

        2.不能在函數式組件上使用 ref 屬性,因為它們沒有實例

        3.舊版 API:String 類型的 Refs,存在問題,可能會在未來移除,不推薦使用。

        4.對父組件暴露refs,在父元素拿子元素

        function CustomTextInput(props) {
        return (
        <div>
        <input ref={props.inputRef} />
        </div>
        );
        }
        
        class Parent extends React.Component {
        //this.inputElement 就是CustomTextInput中的input
        render() {
        return (
        <CustomTextInput
        inputRef={el => this.inputElement = el}
        />
        );
        }
        }
        

        ReactDOM

        獲取一個DOM除了refs還有更加簡單粗暴的方法findDOMNode。

        findDOMNode 是用于操作底層DOM節點的備用方案。使用它的優先級比refs更低!!

        findDOMNode 只對掛載過的組件有效。

        findDOMNode 不能用于函數式的組件中。

        import ReactDOM from 'react-dom';
        ReactDOM.render(
        element,
        container,
        [callback]//不為人知的第三個參數!!
        )
        ReactDOM.unmountComponentAtNode(container)
        ReactDOM.findDOMNode(component)

        不常用的新發現

      11. 空的 JSX 標簽Fragments <></>或者<React.Fragment></React.Fragment>
      12. 與運算符 && true && expression 總是返回 expression,而 false && expression 總是返回 false。
      13. 阻止組件渲染常用null組件的 render 方法返回 null 并不會影響該組件生命周期方法的回調。例如,componentWillUpdate 和 componentDidUpdate 依然可以被調用。
      14. 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        回顧Javascript React基礎

        回顧Javascript React基礎:前言 React核心的單向數據流、一切皆數據的state、不會改變的props,以及狀態提升等等經常使用便不多總結,需要的看官方文檔。 JSX JSX 本質只是為 React.createElement(component, props, ...children)提供的語法糖! 1.React DO
        推薦度:
        標簽: js 入門 javascript
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费福利在线播放| 99视频精品全部免费观看| 看全色黄大色大片免费久久| 亚洲黄色在线观看| 最近的中文字幕大全免费8 | 中文字幕成人免费高清在线 | 亚洲AV午夜成人影院老师机影院 | 亚洲成年人电影网站| 亚洲免费福利视频| 亚洲依依成人精品| 免费被黄网站在观看| 国产亚洲精品2021自在线| 亚洲不卡AV影片在线播放| 一级一级一片免费高清| 国产亚洲精品岁国产微拍精品| 精品一区二区三区无码免费视频 | 美景之屋4在线未删减免费| 亚洲成人高清在线| 成人无码视频97免费| 亚洲精品美女在线观看播放| 毛片A级毛片免费播放| 美女视频黄a视频全免费网站色| 国产成人精品曰本亚洲79ren| 久久国产精品国产自线拍免费| 亚洲视频在线免费看| 成在线人永久免费视频播放| eeuss在线兵区免费观看| 亚洲一区二区影院| 性做久久久久免费看| a在线免费观看视频| 亚洲国产精品人久久电影| 日韩免费电影在线观看| 精品免费久久久久国产一区 | 一级毛片**免费看试看20分钟| 亚洲国产精品国自产拍电影| 成人黄动漫画免费网站视频| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲AV无码一区二区一二区| 亚洲一区二区女搞男| 亚洲免费网站观看视频| fc2成年免费共享视频网站|