react 封装组件方法(弹框)

react 封装组件方法(弹框)

1、使用 vand组件库Animate.css动画
2、建立一个父组件,App.jsx,两个按钮通过切换不同数据的方式渲染弹框内容

// An highlighted block
import React, { useState } from 'react'
import Assembly from './view/Assembly'
export default function App() {
  let [assemblyName] = useState('我是封装的组件A')
  let [assemblyName1] = useState('我是封装的组件B')
  let [ass,setAss] = useState()
  let [flat, setFlat] = useState(false)
  let changeFlat = () => setFlat(!flat)
  let [list, setList] = useState([
    { id: 1, name: '张三', wages: 1000, age: 18, gender: '男' },
    { id: 2, name: '李四', wages: 2000, age: 20, gender: '女' },
    { id: 3, name: '王五', wages: 1600, age: 21, gender: '男' },
    { id: 4, name: '赵六', wages: 1800, age: 22, gender: '女' },
    { id: 5, name: '钱七', wages: 1900, age: 23, gender: '男' },
    { id: 6, name: '孙八', wages: 2100, age: 24, gender: '女' },
  ])
  let [list1, setList1] = useState([
    { id: 1, name: '张无忌', wages: 1000, age: 18, gender: '男' },
    { id: 2, name: '张三丰', wages: 2000, age: 20, gender: '女' },
    { id: 3, name: '赵敏', wages: 1600, age: 21, gender: '男' },
    { id: 4, name: '周芷若', wages: 1800, age: 22, gender: '女' },
    { id: 5, name: '张翠山', wages: 1900, age: 23, gender: '男' },
    { id: 6, name: '殷素素', wages: 2100, age: 24, gender: '女' },
    { id: 7, name: '谢逊', wages: 1000, age: 18, gender: '男' },
  ])
  let [transferValue, setTransferValue] = useState([])
  return (
    <div>

      <button onClick={() => {
        setTransferValue([...list])
        setAss(assemblyName)
        setFlat(!flat)
      }}>组件一</button>
      <button onClick={() => {
        setTransferValue([...list1])
        setAss(assemblyName1)
        setFlat(!flat)
      }}>组件二</button>
      {flat && <Assembly
        title={ass}
        changeFlat={changeFlat}
        list={transferValue}
      >

      </Assembly>}
    </div>
  )
}

3、封装一个子组件Assembly,props接收数据渲染页面,animate.js动画,页面淡淡出现。

// An highlighted block
import React from 'react'
import {Table } from 'antd'
import 'animate.css';

export default function Assembly(props) {
    const onChange = (name, filters, sorter, extra) => {
        console.log('params', name, filters, sorter, extra);
    };
    const { Column, ColumnGroup } = Table

    return (
        <div
            style={{
                width: "100%",
                height: "100vh",
                backgroundColor: "rgba(0,0,0,0.5)",
                // 浮动到顶部
                position: "fixed",
                top: 0,
            }}>
            <div class="animate__animated animate__fadeIn" style={{
                width: "400px",
                minHeight: "400px",
                backgroundColor: "white",
                border: "1px solid black",
                position: "fixed",
                top: "calc(50% - 300px)",
                left: "calc(50% - 200px)",
            }}>
                <h2>{props.title}</h2>
                <Table dataSource={props.list} >

                    <Column title="name" dataIndex="name" key="name" />
                    <Column title="Age" dataIndex="age" key="age" />
                    <Column title="wages" dataIndex="wages" key="wages" />
                    <Column title="gender" dataIndex="gender" key="gender" />
                </Table>
                <button onClick={() => props.changeFlat()} style={{ position: "absolute", top: "10px", right: "10px" }}>关闭</button>
            </div>
        </div>
    )
}

欢迎各位,进行指教,与诸君共勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值