/* eslint-disable */ import React, { useLayoutEffect, useRef, useContext, useState, Component } from 'react'; import { Button, Form, Select } from '@douyinfe/semi-ui'; const ApiContext = React.createContext({}); const HOC = Component => props => { let { text } = props; let { field } = props; const parentApi = useContext(ApiContext); const ref = useRef(props); const logProps = () => { // 通过props取,只能是当次render时的值 console.log(`props: ${props.text}`); // 通过ref取,始终是最新的值 // console.log(`ref.current: ${ref.current.text}`); }; let content = (() => ( <> {Component} Props.text: {text} ))(); useLayoutEffect(() => { ref.current = props; }, [props]); useLayoutEffect(() => { parentApi.register(field, { log: logProps, }); return () => {}; }, [field]); return content; }; let D = HOC(
); class UpdateDemo extends React.Component { constructor() { super(); this.state = { text: 'semi', }; this.change = this.change.bind(this); this.triggerChildLog = this.triggerChildLog.bind(this); this.fields = {}; } change() { this.setState({ text: Math.random() }); } register(field, fieldApi) { this.fields.name = { func: fieldApi, }; } triggerChildLog() { this.fields.name.func.log(); } render() { const { text } = this.state; const api = { register: this.register.bind(this), }; return (
); } } const RuleupdateDemo = () => { const [val, setVal] = useState(['fefe']); const change = () => { let arr = []; arr[0] = Math.random(); setVal(arr); return false; }; return (
{({ formState, values, formApi }) => ( <> {/* */} {JSON.stringify(formState)} )} ); }; export { UpdateDemo, RuleupdateDemo };