Recat.js

PHPz
PHPzオリジナル
2017-04-04 10:14:272258ブラウズ

0. はじめに

「時間があっという間に過ぎてしまうので、私はあなたのことだけを考えています。」 最近、あまり記事を更新していませんが、驚かないでください(笑)。最近、会社は recat.js プロジェクトに取り組んでいますが、私も初心者でまだ勉強中です。ただし、良い学習ドキュメントがあれば任せてください。私、みんなありがとう。

Recat.jsu=2186464112,3083010432&fm=23&gp=0.jpg

1.

はじめに

React
は、ユーザーインターフェースを構築するための

JAVASCRIPです。 図書館。 2. 特徴

宣言型設計 -React は、アプリケーションを簡単に記述できる宣言型パラダイムを採用しています。
  1. 効率的 - React は DOM をシミュレートすることで DOM との対話を最小限に抑えます。
  2. 柔軟性 - React は既知のライブラリや
  3. フレームワーク
  4. とうまく連携します。

    JSX -JSXはJavaScript構文の拡張です。 JSX は React 開発には必須ではありませんが、推奨されます。
  5. コンポーネント - React を通じてコン​​ポーネントを構築すると、コードの再利用が容易になり、大規模プロジェクトの開発にうまく適用できます。
  6. 一方向の応答データ フロー - React は一方向の応答データ フローを実装し、それによって重複コードを削減します。そのため、従来の
  7. データ バインディング
  8. よりもシンプルになります。

    3. 重要なポイント
コードについて話す前に、さらに重要な点をいくつか述べておきます:

いくつかのファイルをインポートする必要があり、順序は変更できません

  1. Recat.jsPaste_Image.png

    コンポーネントベースの開発、すべてがコンポーネント、コンポーネントの作成に含まれるもの、小道具
  2. 値の受け渡し
  3. 、バインディング

    イベントなど

    プラグイン、最も重要な事は recat-router、
  4. routing
  5. 4. コードの実装
1. まず、タイトルの下にいくつかのファイルを紹介します

スクリプトタイプ
  • ノードが 1 つだけ含まれています

  • コンポーネントが必要です クロージャが必要です

  • es6 構文または es5 構文を使用できます

  • 3. js コード

    <script src="../bower_components/react/react.min.js"></script>
    <script src="../bower_components/react/react-dom.min.js"></script>
    <script src="../lib/browser.min.js"></script>
    にコンテナがあります。私たちが作成したネイティブ HTML p タグに加えて、recat 内部のタグをカスタマイズできます。これは実際の
  • DOM ノード
を表しません。recat の観点から見ると、これは recat コンポーネントの単なるインスタンスです。コンポーネントがページに表示されますか? つまり、 render() メソッドを呼び出します。最初のパラメータはレンダリングしたい recat コンポーネント、2 番目のパラメータはコンポーネントがレンダリングされた後に挿入される場所にあります。まとめると、Hello レンダリングの結果は、要素コンテナ内のデモ付き ID に挿入されます。
次に、レンダリング結果を見てみましょう

Paste_Image.png

次に、レンダリング後のページ構造を見てみましょう

Recat.js

Paste_Image.png

さあ、どうか見てくださいこれは、data-recatroot の p と同様に、すべて反映されています。これは、recat が内部で行うもので、私も初心者です。もちろんよくわかりません。はい、教えてください。

Recat.jsスタイルを追加する方法は次のとおりです。

5. HTML 構造コード

はい、ご想像のとおり、これはまだこの構造コード、単純なコンテナです

 <p id="demo"></p>
6. CSS代码

在这里我设置的是我在recat 那个render()方法里的一个className的p,为什么叫className,因为class是js里的保留字,所以我们得用className这个属性,而且我们这样写也是设置样式的一种方式。

 <style type="text/css">
        .demo{
            font-size: 50px;
        }
    </style>
7. js代码

下面你要注意我写的render()方法里的东西,还有另外一种设置样式的方式,那就是设置内联样式,为什么不直接设置fontSize:50,backgroundColor:'red',color:'#fff'”?因为recat这里不支持是字符串的形式,要写一个对象key和value这样的方式,它才可以解析。

<script type="text/babel">
        class Hello extends  React.Component{

            render(){
                var name = "刘玉森";
                var style={fontSize:50,backgroundColor:'red',color:'#fff'};

                return (
                    <p>
                        <p className="demo">123</p>
                        <p style={style}>hello,{name}</p>
                        <input type="text"/>
                    </p>
                )
            }
        }

        ReactDOM.render(
                <Hello/>,
                document.getElementById('demo')
        )
    </script>

展示出来之后的结果

Recat.js

Paste_Image.png

props在recat中是很重要的一个方法

Recat.js

Paste_Image.png

8. HTML容器

这里呢容器没有变,还是那个容器

<p id="demo"></p>
9. js代码
<script type="text/babel">
    class Hello extends  React.Component{

        render(){
            return (
                <p>
                    <p>123</p>
                    <p>hello,{this.props.name}</p>
                </p>
            )
        }
    }
    class Hello1 extends  React.Component{

        render(){
            return (
                <p>
                    <p>123</p>
                    <p>hello,{this.props.address}</p>
                </p>
            )
        }
    }

    class Parent extends  React.Component{
        render(){
            return (
                <p>
                    <Hello name={this.props.name}/>
                    <Hello1 address={this.props.address}/>
                </p>
            )
        }
    }

    ReactDOM.render(
            <Parent name="刘玉森"  address="110"/>,
            document.getElementById('demo')
    )
</script>

这里呢我就得大家说一下我的那个代码,首先呢,我先自定义了一个parent这个标签,然后我创建了一个parent这个组件,我利用this.props把组件外向组件内传值,然后我再创建俩个hello,hello1的组件,获取父元素parent里的值。

看一下页面渲染之后的效果

Recat.js

Paste_Image.png


再看一下页面渲染之后的页面结构

Recat.js

Paste_Image.png

10.HTML代码

依然还是这个容器

<p id="demo"></p>
11. js代码
<script type="text/babel" >
    class Hello extends  React.Component{

        render(){
            return (
                <ul>
                    <li>00000000</li>
                    {
                        this.props.children.map(function(item){
                            return <li>{item}</li>;
                        })
                    }
                </ul>
            )
        }
    }


    ReactDOM.render(
        <Hello>
        <p>11111111</p>
        <p>22222222</p>
        <p>33333333</p>
        <p>44444444</p>
        </Hello>,
        document.getElementById('demo')
    )
</script>

这里呢,我们先写一个li跟我们循环遍历出来的li做个鲜明的对比,这里就利用this.props.children这个方法来读取组件内部的子标签,可以该数组进行遍历

那么我们看下渲染之后的结果

Recat.js

Paste_Image.png


还有我们渲染之后的页面结构

Recat.js

Paste_Image.png

12. HTML代码

容器......

 <p id="demo"></p>
13. js文件

先写一个我遇到的坑

<script type="text/babel" >
    class Hello extends  React.Component{
        getDefaultProps(){
            return {
                name : "刘玉森"
            };
        }
        render(){
            return (
                <h1> hello,{this.props.name}</h1>
            )
        }
    }

    ReactDOM.render(
        <Hello/>,
        document.getElementById('demo')
    )
</script>

这样定义组件你会发现,它不显示,因为使用 Component 定义的组件不能这样去设置默认值

看一下显示的结果

Recat.js

Paste_Image.png


是吧,它不显示,我也是醉了!!!

下面就演示一下正确的写法,下面是见证奇迹的时刻了!

<script type="text/babel" >
    class Hello extends  React.Component{

        render(){
            return (
                <h1> hello,{this.props.name}</h1>
            )
        }
    }

    Hello.defaultProps = {
        name : "刘玉森"
    }

    ReactDOM.render(
        <Hello/>,
        document.getElementById('demo')
    )
</script>

实践是检验真理的唯一标准,来啊互相伤害啊!看图说话

Recat.js

Paste_Image.png


厉害了,我的哥!就想问还有谁,低调啊,这也是我试出来的,慢慢摸索来的...

14. HTML文件

容器还是容器

<p id="demo"></p>

在recat里面我们添加一些事件怎么做到呢?

15. js文件
 <script type="text/babel">
        class Hello extends  React.Component{
            clkFunc(){
                alert('Hello');
            }
            render(){

                return (
                    <p>
                        <button onClick={this.clkFunc.bind(this)}>点我</button>
                    </p>
                )
            }
        }
        ReactDOM.render(
                <Hello />,
                document.getElementById('demo')
        )
    </script>

bind这个方法,它是es5里的方法,可以改变this的指向,详细请你自己查询一下,我解释的不是太好。

那么看一下渲染页面之后的结果

Recat.js

GIF.gif

ref标签的属性,可以从组件中获取真实的DOM节点,也可以绑定事件

Recat.js

Paste_Image.png

16. HTML代码

容器...

<p id="demo"></p>
17. js代码
<script type="text/babel">
        class Hello extends  React.Component{
            clkFunc(){
                this.refs.iptText.value = "hello,刘玉森";
            }
            render(){

                return (
                    <p>
                        <input ref="iptText" />
                        <button onClick={this.clkFunc.bind(this)}>点我</button>
                    </p>
                )
            }
        }


        ReactDOM.render(
                <Hello />,
                document.getElementById('demo')
        )
    </script>

看一下渲染之后的结果

Recat.js

GIF.gif

通过ref这个标签的属性来绑定标签,在添加一个点击事件,调用clkFunc这个函数执行里面的语句,然后把值传入input框内,渲染页面。

下面说一下recat的生命周期,在创建到销毁的生命周期,状态和属性在生命周期中是如何流转的?那么首先要了解recat在浏览器中存在的三个状态,分别是mounted、update、unmounted,代表的含义是安装(实例化)、更新(存在期)、销毁(清理)。

Recat.js

timg.jpg

  • mouted 是指recat components被render这个方法解析生成对应的DOM节点并插入浏览器的DOM结构的一个过程。

  • update 是指一个mounted的recat components被重新的render的过程

  • unmounted 是指一个mounted的recat components对应的DOM节点被从DOM结构中移除的这样一个过程

  • 每一个状态recat都封装了对应的hook函数,翻译成中文就是“钩子函数”,WINDOW的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种反调函数(HOOK)的功能。

如果让我们自己封装这样的hook函数,怎么设计封装?相信大多是人都i知道will和did,将要怎么怎么样和已经怎么怎么样,将要mounted、update、unmounted,和已经mounted、update、unmounted,事实上recat的设计思想也是如此,只不过人家比我们想的更加全面一些,更详细一些,那么来一张图片

Recat.js

timg.jpg

18. HTML代码

上容器

<p id="demo"></p>
19. js代码
 <script type="text/babel">
        class Hello extends React.Component{
            constructor(props){
                super(props);
                this.state = {
                    opacity:0.1
                }
            }
            componentDidMount(){
                this.timer = setInterval(function(){
                    var opacity = this.state.opacity;
                    opacity -=0.05;
                    if(opacity<0.1){
                        opacity=1
                    }
                    this.setState({
                        opacity:opacity
                    })

                }.bind(this),100)
            }
            render(){
                return (
                        <p style={{opacity:this.state.opacity,fontSize:50}}>
                            这个是测试react的生命周期
                        </p>
                )
            }
        }

        ReactDOM.render(
                <Hello/>,
                document.getElementById('demo')
        )
    </script>

这里我们可以调用两个函数,componentWillMount和componentDidMount的两个方法,这两个函数的区别是componentWillMount在mounting前被调用,componentDidMount在mounted后被调用,然后测试一下recat的生命周期

看一下渲染之后的页面效果是什么样的

Recat.js

GIF.gif

刚才的代码中我有用到state这个方法,这个解释就是说,recat把组件看成状态机getInitialState,设置默认值,setState()可以修改state的值,每次state的值发生改变的时候,都会重新渲染UI

Recat.js

Paste_Image.png

20. HTML代码

这是这个文件的最后一个容器...

<p id="demo"></p>
21. js文件
 <script type="text/babel">
        class Hello extends  React.Component{
            constructor(props){
                super(props);
                this.state = {
                    name:'刘玉森',
                    address:'北京',
                }
            }
            clkFunc(){

                this.setState({
                    name:'liuyusen',
                    address:'BeJing'
                })

            }
            render(){

                return (
                    <p>
                        <p>hello,{this.state.name},{this.state.address}!!!</p>
                        <button onClick={this.clkFunc.bind(this)}>点我</button>
                    </p>
                )
            }
        }



        ReactDOM.render(
                <Hello />,
                document.getElementById('demo')
        )
    </script>

这里我有一个点击按钮,当我点击按钮的时候,改变state的值,props和state差别,props一般情况下我们通过组建调用方,在调用组件的时候指定的,props一旦指定了在一般情况下是不会改变的,而state是私属于当前组件的,state的值是可变的,正所谓“props是专情的,state是花心的”,怎么样修改state的值呢?那么就要用到setState这个方法来修改state的值。

看一下刚才的代码渲染之后的页面效果

Recat.js

GIF.gif

5. 結論

私が書いた記事があまり良くないかもしれないし、もちろん、あなたの指導も必要であることは承知しています。 ! !

以上がRecat.jsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。