即日起记录ts、hook开发过程中的点滴


hook useState

问题描述:异步导致数据更新不及时
解决方案:useEffect + setTimeout

  1. const onChange = (activeKey: string) => {
  2. setSlectKey(activeKey)
  3. form.setFieldsValue({env: activeKey})
  4. addForm.setFieldsValue({env: activeKey})
  5. }
  6. useEffect(() => {
  7. setTimeout(() => onChange, 0)
  8. }, [])

Modal 弹窗使用Form组件时,使用useState 赋值是无法同步拿到值的,initialValues 不能被 setState 动态更新,你需要用 setFieldsValue 来更新

react 本身常用类型

无状态组件、函数的类型定义 FunctionComponent 简写 FC

  1. interface TestProps {
  2. id: number,
  3. name: string
  4. }
  5. const Test: React.FC<props: TestProps> = () => {
  6. const { id, name } = props
  7. return (<></>)
  8. }

有状态组件、Component || PureComponent

  1. class Test extends Component<TestProps, TestState> {}

FormEvent、react form 表单event类型,正常结合antd的Form表单使用

  1. <form onSubmit= {(e:FormEvent) => {}}

ChangeEvent、react onChange事件触发的event类型

  1. <input value={} onChange={(e: ChangeEvent<HTMLInputElement>) => {}} />

合成事件

  1. <button onClick={(e:SyntheticEvent<Element, Event>)=>{}}></button>
  2. <input onChange={(e:SyntheticEvent<Element, Event>)=>{}}/>
  3. <form
  4. onSubmit={(e: SyntheticEvent<Element, Event>) => {}}
  5. onBlur={(e: SyntheticEvent<Element, Event>) => {}}
  6. onKeyUp={(e: SyntheticEvent<Element, Event>) => {}}
  7. >
  8. </form>

useRef MutableRefObject 泛型接口,接收一个参数,参数可以为T类型即任意类型

  1. onst prctureRef: React.MutableRefObject<any> = useRef();

useState

  1. const [isShowAdd, setIsShowAdd] = useState<boolean>(false);

ReactElement、ReactNode、JSX.Element

  • ReactElement 是一个接口,包含type、props、key三个属性值,该类型的变量值只能是两种null或者ReactElement 实例
  • ReactNode 是一种联合类型,可以是string、number、boolean、ReactElement、{}等
  • JSX.Element 是 ReactElement的子类型,没有新增的属性。

JSX.Element ≈ ReactElement ⊂ ReactNode