需要:封装MyInput组件,输出拼音过程不触发onChange,拼音输入完结才触发onChange
原理:输出拼音过程触发composition事件,英文/数字输出不触发,而onChange两者都触发,用一个锁管制onChange的机会
问题:无奈做到MyInput只向外裸露onChange事件,且使得MyInput受控

// MyInput.jsximport { PureComponent } from "react";class MyInput extends PureComponent {    constructor(p) {        super(p);        this.state = {            input: "",        };        this.lock = false;    }    handleCompositionStart = () => (this.lock = true);    handleCompositionEnd = (e) => {        const { onChange } = this.props;        let input = e.target.value;        this.lock = false;        onChange(input);        this.setState({            input,        });    };    handleChange = (e) => {        const { onChange } = this.props;        let input = e.target.value;        this.setState({            input,        });        if (!this.lock) {            onChange(input);        }    };    render() {        const { input } = this.state;        return (            <input                value={input}                onCompositionStart={this.handleCompositionStart}                onCompositionEnd={this.handleCompositionEnd}                onChange={this.handleChange}            />        );    }}

应用:

// App.jsxconst App = () => {    return <MyInput onChange={handleChange} />;};