React学习笔记


React 一个构建用户界面的JavaScript库


React学习笔记:

React可以在node的服务端运行,也可以通过引入JS库的方式在浏览器渲染

以下为React目前学习的大致目录,如有遗漏,或者错误,欢迎大家补充和纠正

  1. hello,world
  2. 应用结构
  3. 独创JSX模板语法
  4. 使用create-react-app创建默认程序
  5. props
  6. state
  7. 组件
  8. 生命周期
  9. 组件拆分
  10. 组件交互
  11. react小应用:表格组件

1.hello,world

<body>
    <div id="root"></div>
</body>
<script src="./js/react.development.js"></script>
<script src="./js/react-dom.development.js"></script>
<script src="./js/babel.js"></script>
<script type="text/babel">
    function FunctionHelloWorld() {
        return <h1>hello,world</h1>
    }
    ReactDOM.render(<FunctionHelloWorld/>, document.getElementById('root'))
</script>

运行结果:

2.应用结构

根据上面的hello,world应用结构进行简单拆解

  • react应用组件
         react开发库:<script src="./js/react.development.js"></script>
         reactDom开发库:<script src="./js/react-dom.development.js"></script>
         babelJS:script src="./js/babel.js"></script>

                其中react为react核心库,react-dom为react涉及dom操作部分

                babel用于兼容JSX语法和ES5之后的语法转换为游览器兼容的JS语法

  • 具体实现
<script type="text/babel">
    function FunctionHelloWorld() {
        return <h1>hello,world</h1>
    }
    ReactDOM.render(<FunctionHelloWorld/>, document.getElementById('root'))
</script>

           内部代码使用babel解析,声明一个函数,返回一个包含内容为hello,world的h1标签,

            最后调用ReactDOM.render函数将我们的helloworld函数组件,渲染到root元素节点下

 

3.独创JSX模板语法

JSX是React创建的语法全称JavaScript XML 允许直接在js中书写html元素,而不用通过繁杂的原生方法进行创建,能极大的提高提高js+html的混写效率

试试变量输出和数组输出,JSX语法的代码部分使用"{}"包裹起来,还能自动遍历数组,看h2的输出内容

但是"{}"本身在JS也有自己的语义,所以当我们需要使用到原生语义的时候,需要“{{a:1}}”使用双层包裹来表示内部定义是一个对象,而不是js代码块

如下:

<script type="text/babel">
    let testVar = '你好';
    let testArr = ['小明', '小黄', '阿花']
    function FunctionHelloWorld() {
        return (
            <div>
                <h1>{testVar}</h1>
                <h2>{testArr}</h2>
            </div>
        )
    }
    ReactDOM.render(<FunctionHelloWorld/>, document.getElementById('root'))
</script>
运行结果:

备注:React渲染的组件或元素,必须只能拥有一个根节点元素

如上:<h1>和<h2>都属于div之下,

下面这样会报错,因为有个两个根元素div和p

return (
    <div>
        <h1>{testVar}</h1>
        <h2>{testArr}</h2>
    </div>
    <p></p>
)

 

4.使用create-react-app创建初始程序

第一步:下载nodejs

https://nodejs.org/zh-cn/

根据系统选择适合的nodejs版本

第二步:下载yarn,也可以不使用,yarn安装速度更快,包的依赖管理更严谨

https://classic.yarnpkg.com/zh-Hans/docs/install#windows-stable

第三步:使用node自带的npm或者安装好的yarn进行官方app创建

下面使用yarn进行创建

yarn create react-app my-app

等效于:

yarn global add create-react-app
create-react-app my-app

安装完成后的目录:

入口文件为index.js

index.js

使用 yarn start 运行

访问:http://localhost:3000/

以下结果,App.js已经略微修改

5.props

 自定义组件时,它会将 JSX 所接收的属性以及子组件(children)转换为对象传递给组件,这个对象被称之为 “props”。

示例如下:

我们导入了ToProps组件,并在父组件内调用了ToProps组件,之后将test1和test2两个显示属性和obj对象传递给ToProps组件

ToProps组件内:打印接受到的props对象,并将其中的test1和test2分别使用h1和h2标签显示

console.log(props)的打印结果

运行结果:

props包含一个特殊属性:children,里面包含的是组件内部子节点,一般用于页面嵌套,如:layout组件内嵌套content

示例:

6.state

State 与 props 类似,但是 state 是属于组件本身状态的,并且完全受控于当前组件,且props是完全只读的,我们并没有方法更新props内的数据,所以当涉及用户操作或者数据更新时,需要使用sate,props更适合展示组件

state示例:

通过更新一个count的案例来说明state的作用,state为组件的一个内部状态,有且仅有通过setState的方法修改内部的state属性,当state发生变化时,将自动触发react的重新渲染机制更新dom,摆脱传统的手工更新,专注于交互和业务逻辑开发。

运行结果

 

7.组件

上面我们的React App就是一个最简单的函数组件 通过export 暴露至外部

React组件分为:函数组件和Class组件

函数组件:

包含一个形参,props,相比较于class组件,更简单,效率更高,理论上不应该包含状态,但是可以使用react hook实现状态管理和保存

calss组件:

拥有完整的生命周期,继承自React.Compoent组件,需要覆写render方法返回页面结构,一般用于包含状态的组件,性能相对于函数组件较差

 

8.生命周期

react完整的生命周期

 

    

下面是常用的一些生命周期函数说明:

 

更多内容...5月份有时间在写

组件拆分

组件交互

react小应用:表格组件