• Day07 React——第七天 (18新特性 hook)


    React 18引入了hooks,这是一种让函数组件拥有类组件的功能的方式。使用hooks,函数组件可以拥有状态管理、生命周期方法、副作用处理等功能,使得函数组件具有了和类组件类似的能力。hooks可以让函数组件更加灵活和易于管理,同时也减少了代码的复杂性。常见的hooks包括useState、useEffect、useContext等,它们可以让函数组件更加强大和易于编写。

    useState 

    useState 是一个 React Hook,它允许你向组件添加一个 状态变量。

    格式:const [state, setState] = useState(initialState)

    1. export default function App() {
    2. // 调用useState 添加一个状态变量
    3. // 第一个参数式状态变量
    4. // 第二个参数 修改状态变量的方法
    5. const [count, setCount] = useState(0);
    6. const [span,setSpan] =useState("zhangsan")
    7. function add() {
    8. setCount(count + 1);
    9. setSpan('lisi')
    10. }
    11. return (
    12. <div>
    13. <Hell />
    14. {span}: {count}
    15. <button onClick={add}>+1button>
    16. div>
    17. );
    18. }

    规则:状态不可变

    在react中,状态被认为是只读的,我们应该始终替换他而不是修改它,直接修改状态不能引发视图更新

    classNames

    如何有条件地应用多个 CSS 类? 

    要有条件地应用 CSS 类,你需要使用 JavaScript 自己生成 className 字符串。

    例如,className={'row ' + (isSelected ? 'selected':'')} 将会生成 className="row" 还是 className="row selected" 取决于 isSelected 是否为 true

    1. className = {classNames("nav-item", {
    2. active: type === i.type,
    3. })}

    useRef

    useRef 是一个 React Hook,它能帮助引用一个不需要渲染的值

    1. // 1. useRef 生成ref对象 绑定在dom标签上
    2. // 2 dom 可用时,ref.current 获取dom
    3. // 渲染完成之后dom生成之后才可用
    4. export default function App() {
    5. const inRef = useRef(null)
    6. const getRef =()=>{
    7. console.dir(inRef.current.value);
    8. }
    9. return (
    10. <div>
    11. <input type="text" ref={inRef} />
    12. <button onClick={getRef}>获取button>
    13. div>
    14. )
    15. }

    父子通信

    1. import React from "react";
    2. import {useState} from 'react'
    3. function Sun(props) {
    4. let zi = "我是子组件上的数据";
    5. return (
    6. <div>
    7. <p>{props.hello}p>
    8. <button
    9. onClick={() => {
    10. props.getFu(zi);
    11. }}
    12. >
    13. 传递
    14. button>
    15. div>
    16. );
    17. }
    18. function Zi(props) {
    19. return <div>{props.children}div>;
    20. }
    21. // props 可传递任意的数据
    22. // props 是只读对象
    23. // 不能进行直接修改,父组件的数据只能由父组件修改
    24. export default function App() {
    25. const [zi,updateZi] = useState('');
    26. let hello = "hello world!";
    27. let getFu = (i) => {
    28. updateZi(i)
    29. };
    30. return (
    31. <div>
    32. <p>{zi}p>
    33. {/* 正常传递方式 父先子传递 变量名 = 值 子传父 自定义方法名 = 函数方法 */}
    34. <Sun hello={hello} getFu={getFu} />
    35. {/* children 当我们把内容嵌套再子标签上
    36. 父组件会自动为children的props属性中接收该内容*/}
    37. <Zi>
    38. <span>我是谁!span>
    39. Zi>
    40. div>
    41. );
    42. }

    兄弟通信

    1. function A({ onGetAName }) {
    2. // Son组件中的数据
    3. const name = "this is A name";
    4. return (
    5. <div>
    6. this is A compnent,
    7. <button onClick={() => onGetAName(name)}>sendbutton>
    8. div>
    9. );
    10. }
    11. function B({ name }) {
    12. return (
    13. <div>
    14. this is B compnent,
    15. {name}
    16. div>
    17. );
    18. }
    19. function App() {
    20. const [name, setName] = useState("");
    21. const getAName = (name) => {
    22. console.log(name);
    23. setName(name);
    24. };
    25. return (
    26. <div>
    27. this is App
    28. <A onGetAName={getAName} />
    29. <B name={name} />
    30. div>
    31. );
    32. }

  • 相关阅读:
    业务架构·应用架构·数据架构实战~TOGAF理论全景解读
    mysql中SUBSTRING_INDEX函数用法详解
    React 与 TS 结合使用时组件传参总结
    域名讲解(一)域名基础概念
    【OpenGL】笔记八、摄像机(View矩阵)
    每日4道算法题——第031天
    supOS工业操作系统getPropertiesByInstance服务
    Netty(5)第一行代码Hello World
    等级保护定级之备案!
    SveletJs学习——属性(组件传值)
  • 原文地址:https://blog.csdn.net/gu644335363/article/details/137817785