学习react基础(3)_setState、state、jsx、使用ref的几种形式

简介: 本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

学习react


一、this.setState和this.state的区别?

常常将this.setState称为状态机,因为它在控制着我们类组件的状态,并且可以更改状态,改完之后还可以是页面中的数据也发生变化。而使用this.state对属性赋值只会改变数据并不会改变页面中展示的数据。
所以我们想通过改变数据从而改变页面的时候我们需要使用状态机来改变。

二、react核心

1.核心库

想使用react这个框架,我们并非需要使用脚手架来搭建,我们可以在html中引入它的两个核心库就可以将页面展示出来。

  • react
  • react-dom
  • babel
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <script src="https://cdn.bootcdn.net/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
  </head>
  <body>
    <div id="zjq"></div>
  </body>
  <script type="text/babel">
        class  Zjq extends React.Component{
   
            render(){
   
                return (
                    <div>
                        zjq
                    </div>
                )
            }
        }
    ReactDOM.render(<Zjq/>, document.getElementById("zjq"));
  </script>
</html>

在这里插入图片描述
使用react-dom库中的render方法将Zjq组件渲染到了id为zjq的dom元素上。
利用babel转换jsx至js,上面只是类组件的形式,类组件需要继承来自React.Component这个类,并给实例添加render方法,返回值就是要渲染的dom标签。

2.jsx

javascript xml
jsx:

  1. 虽然是在js中书写标签,但是我们不用给标签加引号,jsx能自动识别为标签。
  2. 标签中的表达式、变量都需要在{}中书写:{this.state.xxx}
  3. 内联样式需要 style={ {height:“100px”}},相当于在{}中插入一个style对象
  4. 只能有一个跟标签
  5. 标签必须要闭合
  6. 标签首字符小写会转成html中同名元素
  7. 大写会自动查找自定义组件 没有的话直接报错

3.class和function组件

在类组件中有状态和生命周期而function中没有,不过16.8版本中添加了hook。

react找到组件,判断calss组件还是function组件,class实例化组件调用自身render方法,function组件直接调用。
class组件中有this指向当前类实例,function中没有this
class中获取外界传来的props直接this.props
function中中获取外界传来的props直接使用函数第一个参数即可

4.事件

react重新对js原生的事件进行了封装,onclick---->onClick,onchange—>onChange等等,全部on开头的事件后面第一个字母都需要大写。

<script type="text/babel">
        class  Zjq extends React.Component{
   
            clickFun=()=>{
   
                console.log("object")
            }
            render(){
   
                return (
                    <div onClick={
   this.clickFun}>
                        zjq
                    </div>
                )
            }
        }
    ReactDOM.render(<Zjq/>, document.getElementById("zjq"));
  </script>

需要给类自身加属性我们使用static
props是只读的,不能修改

5.ref

  • 字符串形式:
<script type="text/babel">
        class  Zjq extends React.Component{
   
            clickFun=()=>{
   
                console.log(this.refs.zjqRef)
            }
            render(){
   
                return (
                    <div onClick={
   this.clickFun} ref="zjqRef">
                        zjq
                    </div>
                )
            }
        }
    ReactDOM.render(<Zjq/>, document.getElementById("zjq"));
  </script>
  • 回调函数形式
 <script type="text/babel">
        class  Zjq extends React.Component{
   
            myref =""
            clickFun=()=>{
   
                console.log(this.myref)
            }
            render(){
   
                return (
                    <div onClick={
   this.clickFun} ref={
   (ref)=>{
   this.myref = ref}}>
                        zjq
                    </div>
                )
            }
        }
    ReactDOM.render(<Zjq/>, document.getElementById("zjq"));
  </script>
  • createRef
<script type="text/babel">
        class  Zjq extends React.Component{
   
            myref =React.createRef()
            clickFun=()=>{
   
                console.log(this.myref.current)
            }
            render(){
   
                return (
                    <div onClick={
   this.clickFun} ref={
   this.myref}>
                        zjq
                    </div>
                )
            }
        }
    ReactDOM.render(<Zjq/>, document.getElementById("zjq"));
  </script>

总结

知其然知其所以然

目录
相关文章
|
20天前
|
XML 前端开发 JavaScript
react之了解jsx
react之了解jsx
|
2月前
|
前端开发 JavaScript
React学习之——条件渲染
【10月更文挑战第16天】React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。
|
20天前
|
JavaScript 前端开发 容器
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
|
28天前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
37 2
|
2月前
|
XML 前端开发 JavaScript
React JSX
React 使用 JSX(一种类似 XML 的 JavaScript 语法扩展)来替代传统 JavaScript 编写 UI。JSX 使代码更简洁、执行更快且类型安全。例如,`&lt;h1&gt;Hello, world!&lt;/h1&gt;` 实际上是创建一个 React 元素,通过 `ReactDOM.render()` 渲染到 DOM。注意,JSX 中使用 `className` 替代 HTML 的 `class` 属性。
|
20天前
|
存储 前端开发 JavaScript
react之jsx编译原理
react之jsx编译原理
|
2月前
|
资源调度 前端开发 JavaScript
React进阶学习
React进阶学习
15 1
|
2月前
|
JSON 前端开发 JavaScript
React 进阶阶段学习计划
React 进阶阶段学习计划
|
22天前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
59 9
|
2月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。