ReactNote01:React的特点和优点

React作为国内最流行的前端框架之一,肯定有它的好用先进之处,作为技术geek,那肯定要学穿它🤔

React的特点

  1. 声明式编程
    • 允许我们只需要维护自己的状态,当状态改变时,React可以根据最新的状态去渲染我们的UI界面;
  2. 组件化开发
    • 能把一个大问题分解成一个小问题一个个实现,便于开发和维护。
  3. 多平台适配
    • React不仅能开发网页应用,React Native也能开发Android和iOS应用。

除此之外,学习React还能掌握先进的技术和思想。并且React的思想被许多框架借鉴,比如Google的Flutter框架就借鉴了React的思想,老美有意思的一点就是他借鉴React的思想,直接官网摆明了说出来。

React开发依赖

开发React必须依赖三个库:

  • react:包含react所必须的核心代码
  • react-dom:react渲染在不同平台所需要的核心代码
  • babel:将jsx转换成React代码的工具
    • babel可以将es6语法转换为es5语法,并且可以将jsx语法转换为js语法。帮助我们更好的进行开发。

react包中包含了react和react-native所共同拥有的核心代码。

react-dom针对web和native所完成的事情不同:

  • web端:react-dom会讲jsx最终渲染成真实的DOM,显示在浏览器中
  • native端:react-dom会讲jsx最终渲染成原生的控件(比如Android中的Button,iOS中的UIButton)

React的优点

为什么需要React呢,我们来看一个案例,要求点击按钮,网页上的文字内容会发生改变。

以下是原生实现。

<body>
    <h2 class="title"></h2>
    <button class="btn">change text</button>

    <script>

        // 这里是命令式编程,就是给计算机一步步指令去完成一件事

        // 1.定义数据
        let message = "Hello, World!";

        // 2.将数据显示在h2元素中
        let titleEl = document.getElementsByClassName("title")[0];
        titleEl.innerHTML = message;

        // 3.点击按钮,页面数据发生改变
        let btnEl = document.getElementsByClassName("btn")[0];
        btnEl.addEventListener("click", e => {
            message = "Hello, React!";
            titleEl.innerHTML = message;
        })
    </script>
</body>

再来看看React实现,是不是感觉代码有点多,还比原生的复杂了。这里是因为我们调用了render函数,并且还没用到React的声明式编程和组件化开发的特点。

<body>
    <div id="app"></div>

    <script type="text/babel">

        let message = "Hello,World!";

        function btnClick() {
            message = "Hello,React!";
            console.log(message);
            render();
        }

        function render() {
            ReactDOM.render(
                <div>
                    <h2>{message}</h2>
                    <button onClick={btnClick}>change text</button>
                </div>,
                document.getElementById("app")
            );
        }

        render();

    </script>


    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <!-- babel转换代码 -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</body>

下面再来看利用了React特点写的代码

<body>
    <div id="app"></div>
    <script type="text/babel">
        class App extends React.Component {
            constructor() {
                super();
                this.state = {
                    message: "Hello,World",
                }
            }

            render = () => {
                return (
                    <div>
                        <h2>{this.state.message}</h2>
                        <button onClick={this.btnClick}>change text</button>
                    </div>
                )
            }

            btnClick = () => {
                // this.state.message = "Hello,React";
                // console.log(this.state);

                this.setState({
                    message: "Hello,React"
                })
            }
        }

        ReactDOM.render(<App />, document.getElementById("app"));
    </script>

    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <!-- babel转换代码 -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</body>

看起来确实优雅了不少。

------------- 本文结束 感谢阅读 -------------