首页 > 其他分享 >react业务开发笔记1

react业务开发笔记1

时间:2023-03-07 15:01:15浏览次数:32  
标签:const return 笔记 react 选态 开发 useState 组件 import

  1. 自定义table空数据
import {   ConfigProvider, Table,   } from 'antd'
// 定义空数据展示
  const renderEmpty = () => (
    <Empty
      imageStyle={{
        height: 60
      }}
      description={<span>description </span>}>
      <Button type="primary" > this is btn</Button>
    </Empty>
  )

return(
      <ConfigProvider renderEmpty={() => renderEmpty()}>
        <Table
        />
      </ConfigProvider>
)

  1. 动态添加操作
  // 操作按钮
  const actionBtn = {
    title: '操作',
    dataIndex: 'action',
    key: 'action',
    fixed: tableType === 'provinices' ? false : 'right',
    align: 'center',
    width: 160,
    render: (_, record) => {
      return (
        <Space>
          <Button type="link" onClick={() => tableRecordHandle(record, 'publish')}>
            发布
          </Button>
          {record.release_status === '已发布' && (
            <Button danger type="link" onClick={() => tableRecordHandle(record, 'remark')}>
              撤回
            </Button>
          )}
        </Space>
      )
    }
  }
  1. 基于usestate可以定义对象作为初始值原理使用一个usestate定义模块数据
import {  useState } from 'react'
import {  Table,   } from 'antd'
  // 表格数据
  const [tableStatus, setTableStatus] = useState({
    columns: [],
    dataSource: [],
    loading: false
  })
setTableStatus(oth=>({...oth,loading:true}))
ajax.then(res=>{
setTableStatus(oth=>({...oth,loading:false}))
  // 重命名返回数据
  const {header:columns, data:dataSource } = res
  setTableStatus(oth=>({...oth,columns,dataSource  }))
)
// 内部项与Table需要接收的参数相同,因而可以直接用展开运算符
return  < Table   {...tableStatus}  />
  1. input键入搜索
        <Input
          placeholder="按enter可直接搜索"
          autoFocus
          onKeyUp={e => enterSearch(e)}
          allowClear
          onChange={e => setKeyword(e.target.value.trim())}
          value={keyword}     
        />

const [keyword, setKeyword] = useState('')
const enterSearch = ({ keyCode }) => {
    // enter键的keyCode是13
    if (keyCode === 13) {
      getPageTableResource()
    }
}
  1. 父组件调用子组件方法(类似vue使用ref调用子组件方法 )

子组件:

import  { forwardRef, useImperativeHandle } from 'react'
const MyTable = (props, parentRef) => {
// 这里写父组件可以调用的方法
  useImperativeHandle(parentRef, () => ({
    clearSelected: () => {
      onSelectChange([], [])
    }
  }))
}
export default forwardRef(MyTable)

父组件:

import {  useRef } from 'react'
import {MyTable    } from './components'
function Enroll() {
  const childRef = useRef(null)

  // dosomething...
  // 父组件调用子组件暴露给父组件的函数
   myTableRef.current.clearSelected()

  return <MyTable ref={childRef } />
}
  1. 关于radio单选防抖(需求:选中即发请求)
import { useState, useCallback, useRef } from 'react'
import { Radio} from 'antd'
import { debounce } from 'lodash'
function MyComp(){
  const [tab, setTab] = useState('1')
    // 防抖单选 useCallback防止失效,debounce防止多次点击
  const radioChange = useCallback(
    debounce(value => {
      setTab(value)
    }, 500),
    []
  )
   return ( <Radio.Group  value={tab}   onChange={e => {   radioChange(e.target.value)  }}  buttonStyle="solid">
            <Radio.Button value="1">show1</Radio.Button>
            <Radio.Button value="2">show2</Radio.Button>
        </Radio.Group>
  )
}

  1. 表单多个子元素(默认只允许一个子元素,否则 :表单验证失效)
import { Input, Form  } from 'antd'
const { Item, useForm } = Form
const { TextArea } = Input
export default function Myform(props) {
    const [form] = useForm()
    return ( <Form name="validate_other" {...formItemLayout} form={form} preserve={false}>
      <Item name="myItemInstance" label="展示内容"> 
        <div>这是一些别的内容</div>
         <Form.Item style={{ marginBottom: '24px' }} name="myItemInstance">
            {/* 这是此子表单项要校验的项  */}
                <TextArea rows={4} placeholder="请输入备注(限制2000字以内)" maxLength={2000} />
        <Form.Item >
      </Item>
  </Form>)
}
  1. 表单内实现多选框全选按钮(支持表单验证)

全选按钮有三种状态:全选态,半选态,不选态。

全选态:选中项等于所有项
不选态:没有选中项
半选态:有选中项且选中项不等于所有项

import { useEffect, useState } from 'react'

function Myfil(){
// 全选
 const [isAllChecked, setIsAllChecked] = useState(false)
// 半选
  const [isIndeterminate, setIsIndeterminate] = useState(false)
// 全选按钮被change时
  const checkAllChange = e => {
    const checked = e.target.checked
    // 当全选框被触发时,首先移除半选态
    setIsIndeterminate(false)
    // 为true, 将表单内该表单项全赋值
    if (checked) {
      setIsAllChecked(true)
      setTimeout(() => {
        form.setFieldsValue({
          myItemInstance: list.map(v => v.code)
        })
      }, 100)
    } else {
    // 否则:全不赋
      setIsYearAllChecked(false)
      setTimeout(() => {
        form.setFieldsValue({
          myItemInstance: []
        })
      }, 100)
    }
  }
return (
  <Item
    rules={[
      {
        required: true,
        message: '此为必选项!'
      }
    ]}
    label="此为label"
    name="myItemInstance"
  >
    <div>
      <Checkbox
        style={{ marginTop: '6px' }}
        checked={isAllChecked}
        indeterminate={isIndeterminat}
        onChange={e => {
         checkAllChange(e)
        }}>
        全选
      </Checkbox>
    </div>
    <Form.Item name="myItemInstance">
      <Checkbox.Group style={{ marginBottom: '6px' }}>
        {Array.isArray(list) &&
          list.length > 0 &&
          list.map(item => {
            const { code } = item
            return (
              <Checkbox
                key={code}
                onChange={e => {
                  setTimeout(() => {
                    const { formYears } = form.getFieldsValue()
                    setIsAllChecked(formYears.length !== 0 && formYears.length === list.length)
                    setIsIndeterminate(formYears.length !== 0 && formYears.length !== list.length)
                  }, 0)
                }}
                value={code}>
                {code}项
              </Checkbox>
            )
          })}
      </Checkbox.Group>
    </Form.Item>
  </Item>


)

}

以上。

标签:const,return,笔记,react,选态,开发,useState,组件,import
From: https://www.cnblogs.com/hjk1124/p/17188027.html

相关文章

  • oracle小笔记
    selectCASEWHENASCIISTR(name)LIKE'%\%'ANDLENGTH(name)=2THEN'*'||SUBSTR......
  • 网络安全实践笔记
    网络安全实践密码学概述通信中的参与者发送者(Alice,爱丽丝):在双方交互中合法的信息发送实体。接受者(Bob,鲍勃):在双方交互中合法的信息接受实体。分析者(Eve,伊夫):破坏接受......
  • 定制开发商城APP有哪些优势呢?
    商城APP可以为企业带来很多好处,比如可以针对性地为用户推送信息,增加其复购率,而且用户足不出户即可满足自己的购买需求,方便随时随地操作。并且后台还会统计出广大用户的使用......
  • 告别数据开发中的人工审核!火山引擎 DataLeap 落地“自动校验开发规范”能力
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近期,火山引擎DataLeap智能市场上线“数仓建表规范”功能,该功能通过规范数仓场景......
  • 房地产APP开发功能介绍
    随着技术的发展,人们对于房地产不仅仅是通过线下实体公司去进行考察了,房地产APP的应用也越来越广泛。不少朋友想进行房地产APP开发,我们现在一起来看看房地产APP都需要哪些功......
  • TypeScript 学习笔记 — 交叉类型、条件类型和条件分发(八)
    目录交叉类型条件类型1.直接传入判断的条件2.把条件当成泛型传入3.多重条件判断4.判断接口中的类型extends父子关系(类型等级)条件分发机制实际开发中如何避免?<T,U>判断......
  • 互联网医院开发|线上问诊小程序|互联网医院系统定制
    互联网医院往往是作为信息化建设的一个项目,由信息部门发起建设,建设完成后门诊、药房、财务等部门进行使用,这几年互联网技术不断进步,人们对于线上医疗的关注也越来越多,在设计......
  • 基于ElementUI和Vue.js的SUNBOOK图书后台管理系统(纯HTML、原生Java后端开发)
    一、项目介绍-使用element-ui、axios和Vue.js实现SUNBOOK的页面结构及网页请求-通过JSON传递请求与响应参数-在后端使用JdbcUtilsByDruid实现对数据的增加、删除、......
  • OMV学习笔记(二)——OMV-extras插件安装
    作为PT下载机使用一段时间后,发现需要实现冗余备份还是需要OMV-extras中的docker和其他插件。只好重新下载。omv-extras插件安装根据omv-extras官方指南,OMV6现在只有一......
  • 构建之法三四章阅读笔记
    第三章软件工程师的成长3.1个人能力的衡量与发展①软件工程包括了开发、运用、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到......