Reactjs 在表单提交时未显示React表单值

Reactjs 在表单提交时未显示React表单值,reactjs,semantic-ui,Reactjs,Semantic Ui,假设我有一些属性,可以等于一些可能的选项。我将在someConstants.js中定义这两个 const possibleOptions = [ {key: '1', text: "some text 1", value: "some_text_1"}, {key: '2', text: "some text 2", value: "some_text_2"}, ]; const someProperties = { flags: [] }; export {

假设我有一些属性,可以等于一些可能的选项。我将在someConstants.js中定义这两个

const possibleOptions = [
    {key: '1', text: "some text 1", value: "some_text_1"},
    {key: '2', text:  "some text 2", value:  "some_text_2"},
];

const someProperties = {
    flags: []
};


export { someProperties, possibleOptions };
import React from "react";
import { someProperties, possibleOptions } from "./someConstants";
import { Form } from "semantic-ui-react";
import "./styles.css";

class SomeForm extends React.Component {
    state = someProperties;

    handleSubmit = event => {
        event.preventDefault();
        this.props.onSubmit(this.state);
    };

    onChange = event => {
        const {
            target: { name, value }
        } = event;

        this.setState({
            [name]: value
        });
    };

    render() {
        return (
            <Form onSubmit={this.handleSubmit} onChange={this.onChange}>
                <Form.Dropdown
                    label="Flags"
                    placeholder="Flags"
                    name="flags"
                    fluid
                    multiple
                    search
                    selection
                    options={possibleOptions}
                />

                <Form.Button type="submit">Submit</Form.Button>
            </Form>
        );
    }
}

export { SomeForm };
import React from "react";
import "./styles.css";

class ShowFlags extends React.Component {
    displayList = list => {
        return(
            <ol>
                {list.map(flag => (
                    <li key={flag}>{flag}</li>
                ))}
            </ol>
        );
    }

    render() {
        return (
            <div>
                {this.props.flagProps.flags}
            </div>
        );
    }
}

export { ShowFlags };
import React from "react";
import ReactDOM from "react-dom";
import { SomeForm } from "./someForm";
import { ShowFlags } from "./showFlags";

class App extends React.Component {
    state = {
        flagProps: {},
        submitted: false
    };

    handleSubmit = fields => {
        this.setState({
            flagProps: { ...fields },
            submitted: true
        });
        console.log("handleSubmit flagProps:" + this.state.flagProps);
    };

    render() {
        return (
            <>
                <div className="Section">
                    <div className="Title">flagProps form</div>
                    <SomeForm flagProps={this.state.flagProps} onSubmit={this.handleSubmit} />
                </div>
                <div className="Section">
                    <div className="Title">The result</div>
                    {this.state.submitted ? (
                        <ShowFlags flagProps={this.state.flagProps} />
                    ) : (
                        <div>Appears on submission.</div>
                    )}
                </div>
            </>
        );
    }
}

ReactDOM.render(<App />, document.getElementById("root"));
我希望
someProperties.flags
在提交表单someForm.js时由
possibleOptions
更新

const possibleOptions = [
    {key: '1', text: "some text 1", value: "some_text_1"},
    {key: '2', text:  "some text 2", value:  "some_text_2"},
];

const someProperties = {
    flags: []
};


export { someProperties, possibleOptions };
import React from "react";
import { someProperties, possibleOptions } from "./someConstants";
import { Form } from "semantic-ui-react";
import "./styles.css";

class SomeForm extends React.Component {
    state = someProperties;

    handleSubmit = event => {
        event.preventDefault();
        this.props.onSubmit(this.state);
    };

    onChange = event => {
        const {
            target: { name, value }
        } = event;

        this.setState({
            [name]: value
        });
    };

    render() {
        return (
            <Form onSubmit={this.handleSubmit} onChange={this.onChange}>
                <Form.Dropdown
                    label="Flags"
                    placeholder="Flags"
                    name="flags"
                    fluid
                    multiple
                    search
                    selection
                    options={possibleOptions}
                />

                <Form.Button type="submit">Submit</Form.Button>
            </Form>
        );
    }
}

export { SomeForm };
import React from "react";
import "./styles.css";

class ShowFlags extends React.Component {
    displayList = list => {
        return(
            <ol>
                {list.map(flag => (
                    <li key={flag}>{flag}</li>
                ))}
            </ol>
        );
    }

    render() {
        return (
            <div>
                {this.props.flagProps.flags}
            </div>
        );
    }
}

export { ShowFlags };
import React from "react";
import ReactDOM from "react-dom";
import { SomeForm } from "./someForm";
import { ShowFlags } from "./showFlags";

class App extends React.Component {
    state = {
        flagProps: {},
        submitted: false
    };

    handleSubmit = fields => {
        this.setState({
            flagProps: { ...fields },
            submitted: true
        });
        console.log("handleSubmit flagProps:" + this.state.flagProps);
    };

    render() {
        return (
            <>
                <div className="Section">
                    <div className="Title">flagProps form</div>
                    <SomeForm flagProps={this.state.flagProps} onSubmit={this.handleSubmit} />
                </div>
                <div className="Section">
                    <div className="Title">The result</div>
                    {this.state.submitted ? (
                        <ShowFlags flagProps={this.state.flagProps} />
                    ) : (
                        <div>Appears on submission.</div>
                    )}
                </div>
            </>
        );
    }
}

ReactDOM.render(<App />, document.getElementById("root"));
从“React”导入React;
从“/someConstants”导入{someProperties,possibleOptions};
从“语义ui反应”导入{Form};
导入“/styles.css”;
类以某种形式扩展React.Component{
状态=某些属性;
handleSubmit=事件=>{
event.preventDefault();
this.props.onSubmit(this.state);
};
onChange=事件=>{
常数{
目标:{name,value}
}=事件;
这是我的国家({
[名称]:值
});
};
render(){
返回(
提交
);
}
}
导出{SomeForm};
这些值将通过showFlags.js显示

const possibleOptions = [
    {key: '1', text: "some text 1", value: "some_text_1"},
    {key: '2', text:  "some text 2", value:  "some_text_2"},
];

const someProperties = {
    flags: []
};


export { someProperties, possibleOptions };
import React from "react";
import { someProperties, possibleOptions } from "./someConstants";
import { Form } from "semantic-ui-react";
import "./styles.css";

class SomeForm extends React.Component {
    state = someProperties;

    handleSubmit = event => {
        event.preventDefault();
        this.props.onSubmit(this.state);
    };

    onChange = event => {
        const {
            target: { name, value }
        } = event;

        this.setState({
            [name]: value
        });
    };

    render() {
        return (
            <Form onSubmit={this.handleSubmit} onChange={this.onChange}>
                <Form.Dropdown
                    label="Flags"
                    placeholder="Flags"
                    name="flags"
                    fluid
                    multiple
                    search
                    selection
                    options={possibleOptions}
                />

                <Form.Button type="submit">Submit</Form.Button>
            </Form>
        );
    }
}

export { SomeForm };
import React from "react";
import "./styles.css";

class ShowFlags extends React.Component {
    displayList = list => {
        return(
            <ol>
                {list.map(flag => (
                    <li key={flag}>{flag}</li>
                ))}
            </ol>
        );
    }

    render() {
        return (
            <div>
                {this.props.flagProps.flags}
            </div>
        );
    }
}

export { ShowFlags };
import React from "react";
import ReactDOM from "react-dom";
import { SomeForm } from "./someForm";
import { ShowFlags } from "./showFlags";

class App extends React.Component {
    state = {
        flagProps: {},
        submitted: false
    };

    handleSubmit = fields => {
        this.setState({
            flagProps: { ...fields },
            submitted: true
        });
        console.log("handleSubmit flagProps:" + this.state.flagProps);
    };

    render() {
        return (
            <>
                <div className="Section">
                    <div className="Title">flagProps form</div>
                    <SomeForm flagProps={this.state.flagProps} onSubmit={this.handleSubmit} />
                </div>
                <div className="Section">
                    <div className="Title">The result</div>
                    {this.state.submitted ? (
                        <ShowFlags flagProps={this.state.flagProps} />
                    ) : (
                        <div>Appears on submission.</div>
                    )}
                </div>
            </>
        );
    }
}

ReactDOM.render(<App />, document.getElementById("root"));
从“React”导入React;
导入“/styles.css”;
类ShowFlags扩展了React.Component{
显示列表=列表=>{
返回(
{list.map(标志=>(
  • {flag}
  • ))} ); } render(){ 返回( {this.props.flagProps.flags} ); } } 导出{ShowFlags};
    这些类的交互可以在index.js中进一步显示

    const possibleOptions = [
        {key: '1', text: "some text 1", value: "some_text_1"},
        {key: '2', text:  "some text 2", value:  "some_text_2"},
    ];
    
    const someProperties = {
        flags: []
    };
    
    
    export { someProperties, possibleOptions };
    
    import React from "react";
    import { someProperties, possibleOptions } from "./someConstants";
    import { Form } from "semantic-ui-react";
    import "./styles.css";
    
    class SomeForm extends React.Component {
        state = someProperties;
    
        handleSubmit = event => {
            event.preventDefault();
            this.props.onSubmit(this.state);
        };
    
        onChange = event => {
            const {
                target: { name, value }
            } = event;
    
            this.setState({
                [name]: value
            });
        };
    
        render() {
            return (
                <Form onSubmit={this.handleSubmit} onChange={this.onChange}>
                    <Form.Dropdown
                        label="Flags"
                        placeholder="Flags"
                        name="flags"
                        fluid
                        multiple
                        search
                        selection
                        options={possibleOptions}
                    />
    
                    <Form.Button type="submit">Submit</Form.Button>
                </Form>
            );
        }
    }
    
    export { SomeForm };
    
    import React from "react";
    import "./styles.css";
    
    class ShowFlags extends React.Component {
        displayList = list => {
            return(
                <ol>
                    {list.map(flag => (
                        <li key={flag}>{flag}</li>
                    ))}
                </ol>
            );
        }
    
        render() {
            return (
                <div>
                    {this.props.flagProps.flags}
                </div>
            );
        }
    }
    
    export { ShowFlags };
    
    import React from "react";
    import ReactDOM from "react-dom";
    import { SomeForm } from "./someForm";
    import { ShowFlags } from "./showFlags";
    
    class App extends React.Component {
        state = {
            flagProps: {},
            submitted: false
        };
    
        handleSubmit = fields => {
            this.setState({
                flagProps: { ...fields },
                submitted: true
            });
            console.log("handleSubmit flagProps:" + this.state.flagProps);
        };
    
        render() {
            return (
                <>
                    <div className="Section">
                        <div className="Title">flagProps form</div>
                        <SomeForm flagProps={this.state.flagProps} onSubmit={this.handleSubmit} />
                    </div>
                    <div className="Section">
                        <div className="Title">The result</div>
                        {this.state.submitted ? (
                            <ShowFlags flagProps={this.state.flagProps} />
                        ) : (
                            <div>Appears on submission.</div>
                        )}
                    </div>
                </>
            );
        }
    }
    
    ReactDOM.render(<App />, document.getElementById("root"));
    
    从“React”导入React;
    从“react dom”导入react dom;
    从“/SomeForm”导入{SomeForm};
    从“/ShowFlags”导入{ShowFlags};
    类应用程序扩展了React.Component{
    状态={
    flagProps:{},
    提交:假
    };
    handleSubmit=字段=>{
    这是我的国家({
    flagProps:{…字段},
    提交:正确
    });
    log(“handlesubmitflagprops:+this.state.flagProps”);
    };
    render(){
    返回(
    旗杆形式
    结果
    {this.state.submitted(
    ) : (
    提交时显示。
    )}
    );
    }
    }
    render(,document.getElementById(“根”));
    
    我怎样才能做到这一点?总结如下:

    当前行为 我可以选择选项,但提交表单不会产生任何显示<代码>ShowFlags.render()不显示任何内容

    期望的行为 我可以选择选项,这些选项在提交表单时通过
    ShowFlags.render()
    显示


    如果重要的话,这是使用语义用户界面。

    以下是您的固定代码:

      onChange = (event, data) => {
        this.setState({
          [data.name]: data.value
        });
      };
    
      render() {
        return (
          <Form onSubmit={this.handleSubmit}>
            <Form.Dropdown
              label="Flags"
              placeholder="Flags"
              name="flags"
              fluid
              multiple
              search
              selection
              options={possibleOptions}
              value={this.state.flags}
              onChange={this.onChange}
            />
    
            <Form.Button type="submit">Submit</Form.Button>
          </Form>
        );
      }
    
    onChange=(事件、数据)=>{
    这是我的国家({
    [data.name]:data.value
    });
    };
    render(){
    返回(
    提交
    );
    }
    

    您忘了将
    onChange
    处理程序应用到
    表单中。
    SomeForm
    中的下拉列表
    ,尽管语义ui反应的工作方式是更改处理程序将道具作为更改函数的第二个参数传递给它们。然后新值将是
    data.value

    您还应该将
    Form.Dropdown
    的值设置为
    value={this.state.flags}
    ,这样它就是一个完全受控的组件,因为您无论如何都要将它置于状态

    我还删除了表单的onChange处理程序,因为这根本不会影响下拉列表。语义UI React(SUI)没有在表单的道具中列出它

    表单上有一个onChange处理程序是一个html属性,而不是SUI属性。这可以解释为什么它不适用于下拉列表。因为它们没有正常的输入/选择html元素库。这也意味着onChange处理程序的普通SUI数据参数将不存在,因此您需要直接从元素中获取属性

    有一个表单onChange处理程序的示例,对于任何具有通常在表单中使用的基本元素的情况,它看起来都非常强大


    基本html元素为:输入、选择和文本区域。

    以下是您的固定代码:

      onChange = (event, data) => {
        this.setState({
          [data.name]: data.value
        });
      };
    
      render() {
        return (
          <Form onSubmit={this.handleSubmit}>
            <Form.Dropdown
              label="Flags"
              placeholder="Flags"
              name="flags"
              fluid
              multiple
              search
              selection
              options={possibleOptions}
              value={this.state.flags}
              onChange={this.onChange}
            />
    
            <Form.Button type="submit">Submit</Form.Button>
          </Form>
        );
      }
    
    onChange=(事件、数据)=>{
    这是我的国家({
    [data.name]:data.value
    });
    };
    render(){
    返回(
    提交
    );
    }
    

    您忘了将
    onChange
    处理程序应用到
    表单中。
    SomeForm
    中的下拉列表
    ,尽管语义ui反应的工作方式是更改处理程序将道具作为更改函数的第二个参数传递给它们。然后新值将是
    data.value

    您还应该将
    Form.Dropdown
    的值设置为
    value={this.state.flags}
    ,这样它就是一个完全受控的组件,因为您无论如何都要将它置于状态

    我还删除了表单的onChange处理程序,因为这根本不会影响下拉列表。语义UI React(SUI)没有在表单的道具中列出它

    表单上有一个onChange处理程序是一个html属性,而不是SUI属性。这可以解释为什么它不适用于下拉列表。因为它们没有正常的输入/选择html元素库。这也意味着onChange处理程序的普通SUI数据参数将不存在,因此您需要直接从元素中获取属性

    有一个表单onChange处理程序的示例,对于任何具有通常在表单中使用的基本元素的情况,它看起来都非常强大


    基本html元素是:input、select和textarea。

    是不是有什么东西阻止了这一理论?如果是这样的话