【问题标题】:Get value of input controls which were created dynamically获取动态创建的输入控件的值
【发布时间】:2020-06-18 03:36:40
【问题描述】:

在我的 React TypeScript 项目中,我以 UI 等形式动态创建多个输入控件,例如 TextField、DatePicker、Checkbox、ComboBox 等。单击提交时,我想获取每个输入控件的值。什么是有效的方法来做到这一点?我可以为每个控件设置一个 onChange 事件,但我想知道是否有更好的方法来做到这一点。

【问题讨论】:

    标签: office-ui-fabric react-tsx office-ui-fabric-react


    【解决方案1】:

    这不是一个坏方法。您可能应该将值存储在组件的本地状态(即setState)或 Redux/Mobx/whatever 存储中(如果有的话)。

    话虽如此,如果您有许多控件并且不想为每个控件添加单独的处理程序,Fabric 组件的onChange 处理程序具有大部分相似的 API,因此您可以拥有一个处理程序,并添加一个元素的标识符,以便更容易存储。

    类似:

    class MyForm extends React.Component<MyFormProps, MyFormState> {
        constructor(props: MyFormProps) {
            super(props);
            this.state = {
                formFields: {...defaultFormValues} // you can imagine having an object of default values
            };
        }
    
        private _onChangeHandler(ev: React.FormEvent<HTMLElement | HTMLInputElement>, newValue: any) => {
            const formFields = {...this.state.formFields};
            formFields[ev.target.dataset.id] = newValue;
            this.setState({formFields});
        }
    
        public render() {
            return (
                <form>
                    <TextField data-id="formelem1" onChange={this._onChangeHandler} />
                    <TextField data-id="formelem2" onChange={this._onChangeHandler} />
                    <CheckBox data-id="checkbox1" onChange={this._onChangeHandler} />
                </form>
            );
        }
    }
    

    请注意,DatePicker 是一个例外,因为它的 onChange 处理程序 (onSelectDate) 将新选择的日期作为单个参数接收,但您可以轻松添加 if 子句来处理这种情况。

    【讨论】:

    • 感谢您的回复。我正在探索组件 Refs。看起来很有希望..
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2013-04-24
    • 2020-08-24
    相关资源
    最近更新 更多