充满荆棘的React之路

useEffect、useState使用

在React中使用useEffect和useState。useeffect的用法是指定一个副效应函数,组件每渲染一次,该函数就自动执行一次。组件首次在网页 DOM 加载后,副效应函数也会执行。useState是react自带的一个hook函数,它的作用是用来声明状态变量。

import React, { useState, useEffect } from "react";

const Test= () => {
	const [tabList, setTabList] = useState([]);
	const [userId, setUserId] = useState();
	
 	const eventList = () => {
	    const params = {
		    id: "10025636"
		    pageNum: 1,
		    pageSize: 20
	    }
	    apis.eventList({
	    	...params
	    }).then(res => {
	        if (res.data?.length > 0) {
		       setTabList(res.data)
	        } else {
	           setTabList([])
	        }
	    })
  	}
    useEffect(() => { eventList(); }, [userId]) // userId,重新执行函数的依赖。
}
export default Test;

Form表单中重置方法form.resetFields();

这里我使用antd框架中4版本的form表单。引入form组件,从Form.useForm()中解析form出来,再表单上绑定form={form}才可以使用表单的重置方法。点击提交以后,如果有值,会把之前输入的值都重置掉。

import { Form } from 'antd4';

const FormItem = Form.Item;

// 表单的提交方法
const onFinish = (value) => {
	if(value){
		form.resetFields();
	}
}

const Test = () => {
    const [form] = Form.useForm();
    <Form name="gateway"
    	form={form}
      	onFinish={onFinish}>
      	 ...
      	 <FormItem>
            <Button type="primary" htmlType="submit">确定</Button>
            <Button type="">取消</Button>
         </FormItem>
    </Form>
}
export default Test;

兄弟组件间的传值

使用事件总线events的方法进行组件间的通讯。在项目中安装events,然后进行配置即可。
1、安装events依赖

npm install events    //通过npm安装

2、在根目录下创建一个utils.js文件并引入events。自定义使用名字为eventBus然后导出,在需要使用的地方引入即可。

import { EventEmitter } from 'events';
const eventBus = new EventEmitter();
export default eventBus;

3、使用案例,在需要使用的地方引入,然后使用eventBus.emit()方法传值。eventBus是我们自定义的名字。powerUserNos是我们传递时候定义的名字,后面用这个变量使用所传的值。

// 传值组件(父组件)
import eventBus from '../utils'; // 引入我们定义好的eventBus
eventBus.emit('powerUserNos', res.data); // 属性名:powerUserNos,要传递的值res.data

4、在子组件使用

// 接收组件(子组件)
const Test= () => {
  const [powerUserNos, setPowerUserNos] = useState('');
  useEffect(() => {
    const getPowerUserNos = (value) => {
      setPowerUserNos(value)
    }
    eventBus.on('powerUserNos', getPowerUserNos); // 对发出的事件进行监听
    return () => {
      // 记得不使用此组件的时候要关闭监听,避免再次进入的时候再次创建一个监听事件,如果如此往复多次,就会创建很多监听事件,这将一发不可以收拾。
      eventBus.removeListener('powerUserNos', getPowerUserNos)
    }
  }, [])
}
export default Test

以上演示的都是同步调用的方法,异步调用的时候需要使用nvoke方法,我目前没用到。用到的时候更新,异步的方法猜测如此,等待实践~

events.invoke('powerUserNos').then(res => {
 	setTxt(res)
});

自定义antd框架中Modal、Form的样式

自定义样式的时候使用:global标识,注意一个很坑的细节,如果是弹框里面的样式自定义,一定要先在modal上定义好wrapClassName属性,这里主要属性名后面直接跟名字,不要加 {style.classNmae}

<Modal
    title={active === 0 ? '参与' : '调整'}
    visible={confirmVisible}
    onCancel={() => {
      setConfirmVisible(false);
    }}
    footer={null}
    wrapClassName='ddPlanNode-content-modal' // 定义好class类名,然后在global中用这个识别才能正确更改样式。
  >
    <div className={style.canyubox}>
      <Form name="sure"
        form={form}
        onFinish={onFinish}>
        ...
:global {
  #sure {
    padding: auto 40px !important;

    .canyuboxtext {
      text-align: center;
      width: 100%;
    }

    .antd4-form-item-control {
      input {
        width: 150px;
      }
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值