每个选择选项的反应 API 调用

Posted

技术标签:

【中文标题】每个选择选项的反应 API 调用【英文标题】:React API call for each selection option 【发布时间】:2020-04-24 10:31:42 【问题描述】:

我有这个接收选择选项值的功能。 此外,我有 3 个选择选项(级别、设施、主机)。当我选择选项时,值将发送到此函数。

private optionFilterHandler = (option: string, key: string | number) => 


// the key can be level , facility , host  
// whereas options are the values of keys
// for level option values are (debug , warning ,info etc)  
// similarly for host and facility have options values


        if (option || key) 
            this.setState(
                option: option,
                key: key,

            ,
                this.filterHandler
            ); // callback function
        

然后作为选项和键存储在状态中

问题是我需要将所有三个选项都发送到 API 例如:API调用应该是这样的

private filterHandler = async () => 

const response: Response = await fetch(
           'http://egrde-tvm-aso1.de.egr.lan:3000/api/v1/search',
           
               method: 'POST',
               headers: 
                   Accept: 'application/json',
                   'Content-Type': 'application/json'
               ,
               body: JSON.stringify(
                facility: this.state.option,
                level: this.state.option,
                host: this.state.option
       );
       );


那么我应该如何发送 json.Stringify() 中的所有三个选项,因为我只得到一个选项值 每次我选择选项时,如何检查选项值是否属于级别、设施或主机。

【问题讨论】:

【参考方案1】:

您可以更改您的状态以拥有一个收集所有选项的对象。然后在事件处理程序中,您可以将选项分配给属性key。此外,也许您打算在事件处理程序中使用&& 而不是||

constructor(props) 
    super(props);
    this.state = 
        options: 
            level: undefined,
            facility: undefined,
            host: undefined
        
    ;


private optionFilterHandler = (option: string, key: string | number) => 
    if (option && key) 
        this.setState(
            
                options:  ...this.state.options, [key]: option 
                // copies the old options object and sets the property `key` to
                // the value `option`
                // Uses "computed property names": https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/Object_initializer#Computed_property_names
            ,
            this.filterHandler
        );
    
;

private filterHandler: Response = async () => 
    const  level, facility, host  = this.state.options
    // ⮤ object destructuring: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring

    if (!level || !facility || !host) 
        // Don't fetch unless all options are present (remove this if
        // it's okay to fetch with partial options)
        return
    

    const response = await fetch(
        'http://egrde-tvm-aso1.de.egr.lan:3000/api/v1/search',
        
            method: 'POST',
            headers: 
                Accept: 'application/json',
                'Content-Type': 'application/json'
            ,
            body: JSON.stringify(this.state.options)
        
    );
;

【讨论】:

感谢cubrr的帮助,问题已解决。 :)

以上是关于每个选择选项的反应 API 调用的主要内容,如果未能解决你的问题,请参考以下文章

用户选择后的API调用

为啥选择的选项隐藏在反应中?

如何在反应选择下拉菜单中的选项下添加子选项?

隐藏选择框中已选择的选项 ReactJS

如何避免vue中api调用的onchange?

如何在反应原生功能组件中制作动态选择器?