react兄弟组件之间的传值

一.通过redux

1.在redux中找到对应的文件设置

a.

b.

c.

d.

2.页面存储数据到redux中

3.页面提取redux里面的数据

二.通过hook中的createContext来实现

1.父组件中的写法

import React, { memo, useState } from 'react'
import { Row, Col } from 'antd';
import Department from "@/container/setModule/department";
import UserList from "@/container/setModule/userList";
import { useSetState } from '@/hooks'export const userManageContext = React.createContext();const UserManage = memo(function UserManage(props) {const [userManageData, setUserManageData] = useState();const UserManageContextProps = {userManageData,setUserManageData}return (<div className="bgW padding-20px"><Row><userManageContext.Provider value={UserManageContextProps}><Col span={4}><Department /></Col><Col span={20} style={{ paddingLeft: '10px', boxSizing: 'border-box' }}><UserList /></Col></userManageContext.Provider></Row></div>)
})export default UserManage

2.Department子组件中的写法

import React, { memo, useState, useEffect, useContext, useRef, useMemo } from 'react'
import { useAsync } from '@/hooks'
import { Input, Menu, Tree } from 'antd';
import { treelist } from '@/api/set'
import { requestCode } from '@/utils/varbile'
import { userManageContext } from '@/pages/set/userManage'
import { DownOutlined } from '@ant-design/icons';
import RouterLoading from "@/components/routerLoading";const Department = memo(function Department(props) {const reviceProps = useContext(userManageContext);const { Search } = Input;const [searchValue, setSearchValue] = useState();const [treelistdata, setTreelistdata] = useState([]);const refsData = useRef([]);useEffect(() => {const asyncTypes = async () => {let res = await treelist({ deptName: searchValue })res.code === requestCode.successCode && setTreelistdata(res.data);}asyncTypes();}, [searchValue])const onSearch = value => {setSearchValue(value)}const onSelect = (selectedKeys, info) => {console.log('selected', selectedKeys[0], info);// let selectedid = selectedKeys[0]reviceProps.setUserManageData(selectedKeys[0]);};const { TreeNode } = Tree;const getTreeNode = (treelistdata) => {if (treelistdata && treelistdata.length > 0) {return treelistdata.map((item) => {if (item.children && item.children.length) {return (<TreeNode key={item.deptId} title={item.deptName}>{getTreeNode(item.children)}</TreeNode>);}return (<TreeNodekey={item.deptId}title={item.deptName}// switcherIcon={<DownOutlined />}/>);});}// return [];};const tree = useMemo(() => {return <><Treestyle={{ width: '100%', marginTop: 50 }}showLineswitcherIcon={<DownOutlined />}// defaultExpandedKeys={['0-0-0']}onSelect={onSelect}autoExpandParent={true}defaultExpandAll={true}// treeData={treelistdata}>{getTreeNode(treelistdata)}</Tree></>;}, [treelistdata])// console.log(userManageMenu(treelistdata), '111')return (<div style={{ border: '1px solid #f0f0f0',padding: '10px',height:'720px'}}><Search placeholder="输入部门名称搜索" onSearch={onSearch} enterButton style={{ paddingTop: 20 }} />{treelistdata.length ? tree : RouterLoading}</div>)
})export default Department

3.UserList组件中的写法

import React, { memo, useEffect, useCallback, useContext, useState } from 'react'
import { LayoutTableComponent } from "@/components/layoutTable";
import SaleSearch from "@/components/searchCompent";
import { useSetState, useDel, usePagaTion } from '@/hooks'
import AddUser from "@/container/setModule/addUser";
import { SAGA_SYSUSER_LIST } from '@/redux/constants/sagaType'
import { createSelector } from 'reselect';
import { useSelector, useDispatch } from "react-redux";
import OPtionCompent from '@/components/optionCompent'
import { sysuserdel, sysuserresetPwd } from "@/api/set";
import { Switch, notification } from 'antd';
import { asstate } from "@/assets/js/staticData";
import { confirm, quenue } from '@/utils/function'
import { requestCode } from '@/utils/varbile';
import { userManageContext } from '@/pages/set/userManage'const UserList = memo(function UserList(props) {const reviceProps = useContext(userManageContext);const [editData, setEditData] = useSetState({ visible: false, datailData: {} });const [searchValue, setSearchValue] = useSetState({});const { forceUpdate, pagaTion, changePgVal } = usePagaTion();const selectNumOfDoneTodos = createSelector([(state) => state.set],(set) => [set.sysuserlist]);const [sysuserlist] = useSelector(selectNumOfDoneTodos);const initFetch = useCallback((searchValue) => {const searchsVal = Object.assign({}, searchValue, { start: searchValue.createTime && searchValue ? searchValue.createTime[0] : null, end: searchValue.createTime ? searchValue.createTime[1] : null, createTime: null })dispatch({ type: SAGA_SYSUSER_LIST, payload: { ...pagaTion.current, ...searchsVal } })}, [dispatch, pagaTion.current]);const dispatch = useDispatch();useEffect(() => {initFetch({ ...searchValue, deptId: reviceProps.userManageData })}, [initFetch, searchValue, reviceProps.userManageData])const [deletedata] = useDel(sysuserdel, () => initFetch());const columns = [{key: 'id',align: 'center',title: '序号',fixed: 'left',render: (text, record, index) => `${index + 1}`,},{title: '用户名',dataIndex: 'userName',key: 'userName',align: 'center',},{title: '昵称',dataIndex: 'nicoName',key: 'nicoName',align: 'center',},{title: '性别',dataIndex: 'sex',key: 'sex',align: 'center',},{title: '电话',dataIndex: 'phonenumber',key: 'phonenumber',align: 'center',},{title: '邮箱',dataIndex: 'email',key: 'email',align: 'center',},{title: '部门/岗位',dataIndex: 'deptName',key: 'deptName',align: 'center',render: (text, record) =><><span>{record.deptName}</span> / <span>{record.postName}</span></>},{title: '状态',dataIndex: 'isdelete',key: 'isdelete',align: 'center',render: (text, record, index) =><><Switch checkedChildren="激活" unCheckedChildren="禁用" key={text} defaultChecked={!text} disabled={true} /></>},{title: '创建日期',dataIndex: 'createTime',key: 'createTime',align: 'center',},{width: 200,title: '操作',dataIndex: 'createTime',align: 'center',fixed: 'right',render: (text, record) => (<>{!record.isdelete ? <OPtionCompent config={[{ title: '编辑', operating: () => handle(2, record) },{ title: '重置密码', color: 'green', operating: () => resetPwd(record) },{ title: '删除', color: 'red', operating: () => deletedata({ userId: record.userId, listen: Math.random() * 1000, idKey: 'userId' }) }]} /> : null}</>)},];const datas = {btnGrounp: [{title: '新增',onClick: (e) => handle(1),iconClass: 'add'},// {//   title: '导出',//   onClick: (e) => handle(),//   iconClass: 'export',//   type: "dashed"// },// {//   title: '删除',//   onClick: (e) => handle(),//   iconClass: 'delete',// }],tableProps: {id: 'userId',columns: columns,dataSource: sysuserlist.rows,scroll: { x: 1500, y: 400 },loading: false,},pagaTionProps: {total: sysuserlist.total || 0,current:pagaTion.current.page,pageSize:pagaTion.current.size,onChanges: (page, size) => [changePgVal(page, size), forceUpdate()],},receive: () => initFetch(),}const searchConfig = [{title: '名称',key: 'username',type: 'input'},{title: '日期',key: 'createTime',type: 'timeRangeSelection'},{title: '状态',key: 'isdelete',type: 'select',selectListValue: asstate,selectLableName: 'value',selectKeyValue: 'label'},];const handle = (state, datailData = {}) => {setEditData({ visible: true, datailData })}const resetPwd = async (record) => {confirm(async () => {let res = await sysuserresetPwd({ userId: record.userId })if (res.code === requestCode.successCode) {notification['success']({message: '你重置的默认密码如下',description: 'admin123456',duration: 8,});}}, '你确定要重置密码吗?');}return (<div style={{ border: '1px solid #f0f0f0', padding: '10px', height: '720px' }}><LayoutTableComponent {...datas}><SaleSearch options={searchConfig} callBack={setSearchValue} /></LayoutTableComponent><AddUser {...editData} onCancel={() => setEditData({ visible: false })} sucessCallback={() => initFetch(searchValue)} /></div>)
})export default UserList

组件Department向组件UserList传值

引入父组件中的设置

import { userManageContext } from '@/pages/set/userManage'

取参数两个子组件都要写

const reviceProps = useContext(userManageContext);

存值

reviceProps.setUserManageData(selectedKeys[0]);

取值

reviceProps.userManageData

react兄弟组件之间的传值相关推荐

  1. vue兄弟组件之间的传值,bus运用,beforeDestroy销毁,Bus.$off

    vue兄弟组件之间的传值 1.建立一个单独的文件bus.js import Vue from 'vue' export default new Vue() 2.传递事件 // 传递事件 import ...

  2. VUE父子组件之间的传值,以及兄弟组件之间的传值;

    一.Vue父子 组件之间传值 vue使用中,经常会用到组件,好处是: 1.如果有一个功能很多地方都会用到,写成一个组件就不用重复写这个功能了: 2.页面内容会简洁一些:方便管控: 子组件的传值是通过p ...

  3. React(5)React兄弟组件之间的通信

    文章目录 前言 一.兄弟组件之间的通信原理 二.三个组件的基本结构 1.子组件ColorSelector的基本结构 2.子组件ColorBoard的基本结构 3.父组件Color的基本结构 三.Col ...

  4. React兄弟组件之间通信

    兄弟组件之间通信 React是只有单项数据流动模式,也就是只能父组件的数据传递给子组件,而没有办法将子组件的数据传递给父组件.那么如果想要两个子兄弟组件通信该怎么办呢? 答案是可以通过子组件向父组件推 ...

  5. vue 兄弟组件之间的传值

    1. 定义一个公共的bus.js //bus.js import Vue from 'vue' export default new Vue() 2. 在子组件A里用$emit发射数据 <scr ...

  6. 兄弟组件之间进行传值

    首先创建一个中转站,是个js文件 import Vue from 'vue' var hub=new Vue(); //中转站 export default hub; 然后在第一个兄弟组件中 1.首先 ...

  7. react 父子组件之间相互传值

    From: https://blog.csdn.net/luzhaopan/article/details/85003362 1.定义父组件 import React, { PureComponent ...

  8. react父子组件之间的传值

    父传子------------- 父组件 constructor(props){super(props)this.state={message:"我是父组件传来的"} }rende ...

  9. 前端开发:组件之间的传值(父传子、子传父、兄弟组件之间传值)的使用

    前言 在前端开发的时候,处理数据.传递数据是非常常用的操作方式,也是前端开发工作中非常重要的部分.尤其是在前端开发过程中的组件之间的数据传递,是必用操作.那么本篇博文就来分享一下在前端开发的时候,对于 ...

最新文章

  1. [转载]Linux 线程实现机制分析
  2. Windows phone应从Android吸取四点教训
  3. Community Server系列之二:页面之间的关系1[介绍]
  4. linux系统实用脚本,常用linux系统命令及简单小脚本
  5. java 中batch_java相关:Mybatis中使用updateBatch进行批量更新
  6. MFC dialog 间 交互[2]
  7. MFC学习之简单的文本文件编辑器
  8. android实现b站弹幕,B站弹幕库DanmakuFlameMaster源码浅析
  9. 【软件测试】:测试改进措施总结
  10. 两个栈实现一个队列,两个队列实现一个栈-JAVA
  11. 进程管理(一)--进程管理的基本概念
  12. 基于FML的MinecraftMod制作学习笔记——开发环境的配置
  13. 二维正态分布参数rho的作用
  14. Linux远程终端工具之Xmanager----Xbrowser篇
  15. 社群是什么?真正的社群是怎么样的?
  16. 中南林业科技大学Java实验报告十二:数据库系统设计 - 从0到1搭建java可视化学生管理系统源代码
  17. 灰色关联度矩阵--基于Matlab
  18. 马云谈大数据:就像石油和电一样
  19. 前端接收java验证码_在Web项目中手机短信验证码实现的全过程记录
  20. 2018年Java面试题

热门文章

  1. QCryptographicHash实现哈希值计算,支持多种算法
  2. 2022年4月11日 Coursera国内无法播放视频问题解决
  3. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching
  4. (Matlab实现)蚂蚁狮子优化算法在电力系统中的应用
  5. javascript:常用API学习Math.random, toString,slice(),substr(),Math.ceil()
  6. 通用型集成运放结构及特点
  7. 【下载器篇】IDM下载记录分析(简)
  8. 自制hdmi线一头改vga图_谷歌Up主自制秃头生成器张东升躺枪,而这款生发GAN让你发际线前进一公里!...
  9. [附源码]Java计算机毕业设计SSM飞羽羽毛球馆管理系统
  10. 李开复讲述离开谷歌后的生活