当前位置: 首页 > news >正文

react__jsx语法

在我看来,写在return里面的内容属于jsx

1、在jsx中可以使用大括号来识别表达式

      大括号里可以写:引起来的字符串

      大括号里可以写:javascript变量

      大括号里可以写:函数调用和方法调用

      大括号里可以写:javascript对象

2、在jsx中实现列表渲染可以使用map方法

const list = [
    {
        id:'001',
        name:'d'
    },
    {
        id:'002',
        name:'q'
    },
    {
        id:'003',
        name:'s'
    }
}

<ul>
    { list.map(item=> <li key={item.id}>item.name</li>) }
</ul>

3、在jsx中实现条件渲染可以使用逻辑运算符或者三元表达式

对于一些基础的条件渲染:

{ true && <h1>dqs</h1> }

{ true? <h1>dqs</h1> :<h1>dhj</h1> }

对于复杂的条件渲染:

let articleType = 6

const thisContent = ()=>{
  if(articleType === 0){
    return <h1>我是0</h1>
  }else if(articleType === 1){
    return <h1>我是1</h1>
  }else{
    return <h1>我什么也不是</h1>
  }
}

4、事件绑定

on + 事件名称 = { 事件处理程序 }

const handleClick  = ( e )=>{ }

不带参数: 

onClick = { handleClick }

带参数:

onClick = { ()=> handleClick("dqs") }

带e带参数:

onClick = { (e)=> handleClick("dqs" , e) } 

5、react组件

关于组件的声明其实就是一个首字母大写的函数,渲染组件把函数名当成标签来写

//内部存放了组件的逻辑和视图UI
function MainBox (){
    return (

    )
}

function Main (){
    return (
        <Mainbox></Mainbox>
    )
}

6、react hook 函数

 react hook函数使用规则:

        1、只能在组件中或者其他自定义的hook函数中调用

        2、只能在组件的顶层调用,不能在if for 或者其他函数中

 useState:允许我们向组件添加一个状态变量,从而影响组件渲染的结果。

        注:与普通js不同,状态变量一旦发生变化,视图UI也会跟着变化,数据驱动视图

                useState是一个函数,返回值是一个数组,

                第一个值为状态变量,

                第二个值是用来修改状态变量的函数,用该set函数修改视图才会更新,

                useState的参数将作为状态变量的初始值。

                对于对象类型的变量:

                        let [user , setUser] = useState({name:'Jack'})

                        setUser(
                           {        
                                ...user,
                                name:'dqs'
                            }
                        )

  useRef:主要用于在react中获取/操作dom

        注:const inputRef = useRef(null)

               <input type='text' ref={inputRef} />

               其中inputRef.current可用来获取

  useEffect:用于在react中不是由事件引起,而是由渲染本身引起的操作,例:ajax请求,更改dom

        写法:useEffect(()=>{

                   },[])

                   注:第一个为副作用函数,放置要执行的操作

                          第二个防止依赖项,若为空,则只在渲染完执行一次

                          关于依赖项注解:

                                没有依赖项时,则在初始渲染时和组件更新时执行一次

                                依赖项为空数组时,则仅仅在初始渲染时执行一次

                                添加了特定依赖项,则在初始渲染时和依赖项变化时执行一次

                    清除副作用:

                          清理副作用函数最常见的执行时机是在组件卸载时自动执行

                          return ()=>{    //清除副作用逻辑

                          }

  自定义hook:

        自定义hook是以use打头的函数,通过自定义hook函数可以实现逻辑的封装和复用

7、基础样式控制

行内样式:

        style={ { color:'red' } }

类名控制:

        className='container'

        如果需要动态类名控制:可以选用classnames库

                className={classNames('foot' , {active: type === item.type})}

8、受控表单绑定

对于react input输入框和state数据的双向绑定

let [count , setCount] = useState(1)

<input/
    type='text',
    value={count}
    onChange={(e)=>setCount(e.target.value)}
>

9、组件通信

父子通信:

        父传子:传递数据,在子组件标签上绑定属性

                       <Son name={"dqs"}></Son>

                      子组件通过props参数接受数据

                       function Son(props){     

                        }

                        props说明:其中props是一个对象

                                            可传递任意对象:数值 字符串 布尔值 数组 对象 函数 JSX

                                            子组件中只能读取,不能修改

                                            引用的子组件时,标签内部可以写内容,用props.children来接收。

        子传父:在子组件中调用父组件的函数,并携带参数

                        父组件中声明函数,传给子组件,

                        子组件接受并触发,带个参数

兄弟通信:

        1、通过子传父先传给父组件

        2、通过父传子再传给另一个子组件

跨层通信:

        使用context机制来实现跨层通信

        1、使用createContext创建一个上下文对象Ctx, const Ctx = createContext()

        2、在顶层组件通过Ctx.provider组件提供数据 ,

              <Ctx.Provider value={name}></Ctx.Provider>

        3、在底层组件中通过useContext来获取数据

              const value = useContext(Ctx)

相关文章:

  • Angular由一个bug说起之十四:SCSS @import 警告与解决⽅案
  • 【Godot4.0】EasyClock时钟组件
  • 自动同步多服务器下SQL脚本2.0
  • Python:函数式编程
  • 达梦数据库中插入导出图片的方法与应用
  • uniapp+微信小程序+最简单局部下拉刷新实现
  • 看不见的“健康杀手”来袭,微塑料竟威胁人体与植物光合作用
  • 多肽纯度如何选择?
  • 【2步解决】phpstudy开机自启(自动启动phpstudy、mysql、nignx或apache、自动打开网址)
  • 自学Java-Java高级技术(单元测试、反射、注解、动态代理)
  • 深度迁移学习实战指南:从理论到产业级应用
  • Windows Wise Care 365 PRO-中文便携版
  • 【C++入门】变量和基本类型
  • Win10 下搭建免费的 FTP 服务器 FileZilla
  • 如何简单获取三个月免费试用的SSL证书
  • 处理Java中的异常
  • STC 51单片机64——关于STC8H的ADC回程误差问题
  • starrocks批量启停脚本
  • Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境
  • 兴达易控Profinet 转 ModbusTCP跨网段通信模块
  • 海南征集民生领域涉嫌垄断违法行为线索,包括行业协会等领域
  • 又是“9+2”复式票,浦东退休阿姨擒大乐透1153万头奖
  • 中纪报:强化监督推动过紧日子要求落到实处
  • 《中华人民共和国经济史(1949—1978年)》教材出版发行
  • 谷神星一号海射型遥五运载火箭发射成功
  • 国新办10时将举行新闻发布会,介绍4月份国民经济运行情况