首页 > 其他分享 >react组件传值

react组件传值

时间:2022-11-04 18:23:31浏览次数:56  
标签:const return react useState 组件 import 传值

1.父传子

1.1父组件准备数据,父组件通过属性age直接传递给子组件

import React, { useState } from 'react'
import Childs from './Childs'

export default function RefUse() {
  const [age, setAge] = useState(12)
  return (
    <div>
      <button onClick={() => {
      }}>dianji</button>
      <Childs age={age} getName={(val) => console.log(val)}></Childs>
    </div>
  )
}

import React, { useState } from 'react'

export default function Childs(props) {
  const [uname, setUname] = useState('lisi')
  return (
    <div>
      {props.age}
    </div>
  )
}

2.子传父

  1. 传入回调,子组件执行。
  2. 或者使用组件的ref

import React, { useState } from 'react'
import Childs from './Childs'

export default function RefUse() {
  const [age, setAge] = useState(12)
  return (
    <div>
      <Childs getName={(val) => console.log(val)}></Childs>
    </div>
  )
}

import React, { useState } from 'react'

export default function Childs(props) {
  const [uname, setUname] = useState('lisi')
  return (
    <div>
      {props.getName(uname)}
    </div>
  )
}

3.多层级(祖孙)

使用usecontext
用于向子组件传递数据,方法。配合useReducer,管理状态
什么是上下文呢?
全局变量就是全局的上下文,全局都可以访问到它;上下文就是你运行一段代码,所要知道的所有变量
使用
1.要先创建createContex
使用createContext创建并初始化
const c = React.createContext(null) // 写在组件外面

2.Provider 指定使用的范围
在圈定的范围内,传入读操作和写操作对象,然后可以使用上下文

<C.Provider value={{n,setN}}>
      这是爷爷
      <Baba></Baba>
    </C.Provider>

3.最后使用useContext
使用useContext接受上下文,因为传入的是对象,则接受的也应该是对象

const {n,setN} = useContext(C);

案例
注意,不在一个文件中要导出,导入c

import React, { createContext, useContext, useReducer, useState } from 'react'
import ReactDOM from 'react-dom'

// 创造一个上下文
const C = createContext(null);

function App(){
  const [n,setN] = useState(0)
  return(
    // 指定上下文使用范围,使用provider,并传入读数据和写入据
    <C.Provider value={{n,setN}}>
      这是爷爷
      <Baba></Baba>
    </C.Provider>
  )
}

function Baba(){
  return(
    <div>
      这是爸爸
      <Child></Child>
    </div>
  )
}
function Child(){
  // 使用上下文,因为传入的是对象,则接受也应该是对象
  const {n,setN} = useContext(C)
  const add=()=>{
    setN(n=>n+1)
  };
  return(
    <div>
      这是儿子:n:{n}
      <button onClick={add}>+1</button>
    </div>
  )
}


ReactDOM.render(<App />,document.getElementById('root'));

4.兄弟组件

发布订阅模式

1.创建一个bus.js 用来放订阅者和发布者的方法。

let bus = {
  arr: [],
  // 订阅者(传入回调
  subScribe(callback) {
    this.arr.push(callback)
  },
  // 发布者(执行回调,传入参数
  publish(params) {
    this.arr.forEach(callback => {
      callback && callback(params)
    })
  }

}

export default bus

组件A

import React from 'react'
import bus from '../../utiles/bus'

export default function Add() {
  return (
    <div>

      <button onClick={() => {
        bus.subScribe((val) => {
          console.log(val)
        })
      }}>加</button>
    </div>
  )
}

组件B

import React from 'react'
import bus from '../../utiles/bus'

export default function Jian() {
  return (
    <div>
      <button onClick={() => {
        bus.publish(114514)
      }}>减</button>
    </div>
  )
}

生产消费模式

标签:const,return,react,useState,组件,import,传值
From: https://www.cnblogs.com/coderz1/p/16858705.html

相关文章

  • 前端框架学习react还是vue?
    究竟如何正确使用?作为小白的我们从何学起比较好?带着一系列问题来看看吧。这篇主要介绍:1、从出身背景、优势、缺点、适合场景、开发模式、实践情况进行对比2、相似之处......
  • 12-组件篇之消息队列(1)_ev
               ......
  • Vue中路由的query、params参数。如何传值、如何取值。详细过程+图解
    1、路由的query参数1.1传递参数<!--跳转并携带query参数,to的字符串写法--><router-link:to="/home/message/detail?id=666&title=你好">跳转</router-link>......
  • React Markdown Documentation Generator All In One
    ReactMarkdownDocumentationGeneratorAllInOneSSGhttps://github.com/topics/static-site-generatornext.jshttps://github.com/vercel/next.jsgatsbyhttps:......
  • react生命周期(详细版)
    首先生命周期分为三个阶段:挂载:已经插入真实dom渲染(更新):正在被重新渲染卸载:已经移出真实dom一、挂载:在组件实例被创建并插入到dom中时,生命周期调用顺序......
  • 二次封装 Vue-Treeselect 组件
    场景开发中多个地方都需要用到vue-treeselect组件,于是想二次封装成SelectTree组件便于使用。需求1:自定义选项样式插槽option-labelSelectTree组件预留插槽`diy-......
  • SpringCloud的重要组件
    SpringCloud基本组件一、SpringCloud是什么SpringCloud是一套基于SpringBoot的微服务解决方案。最开始是由NetFilx开源的一些组件,但是由于这些组件已经进入了维护模式(不......
  • 细说React组件性能优化
    React组件性能优化最佳实践React组件性能优化的核心是减少渲染真实DOM节点的频率,减少VirtualDOM比对的频率。如果子组件未发生数据改变不渲染子组件。组件卸载前......
  • React-Hook最佳实践
    ReactHook新出现背景类组件的问题复用组件状态难,高阶组件+渲染属性providerscustomers,等一堆工具都是为了解决这个问题,但是造成了很严重的理解成本和组件嵌套地狱......
  • 详解React的Transition工作原理原理
    Transition使用姿势Transition是react18引入的新概念,用来区分紧急和非紧急的更新。紧急的更新,指的是一些直接的用户交互,如输入、点击等;非紧急的更新,指的是UI界面......