javascript - React 输入复选框不间接更新状态

标签 javascript reactjs checkbox

不幸的是,我不明白渲染中输入checkbox的逻辑。问题是这样的:

1) 我有输入类型复选框,其上带有 onChangechecked 属性;
2)我还有按钮handleSearch,点击按钮后它会从后端获取API信息;
3)如果我点击复选框,它也会从API接收信息(来自与第二步中相同的API,具有相同的参数)。

问题是:如果我单击checkbox,它将发送checkbox的虚假参数,因为据我所知,由于某种原因,它反之亦然。但是,如果我尝试先单击按钮,它就会正常工作。

所以我需要发送处理复选框的truthy参数。

在render()中输入:

    <input
        type="checkbox"
        className="custom-control-input"
        name="grouping"
        id="updateprice"
        checked={grouping}
        onChange={this.onGroupingChange}
    />      

复选框处理程序():

      onGroupingChange = (e) => {
         const {grouping} = this.state;
        this.setState({ grouping: e.target.checked});
             this.getSales(grouping);
    };

OnClick 处理程序():

      handleSearch = () => {
        const { grouping  } = this.state;
        this.setState({ isLoading: true });
        this.getSales(grouping);
    };

getSales()

getSales = (grouping) => {
        let notattr;
        if (grouping===false){
            notattr=1
        }
        else notattr = 0
        this.setState({isLoading: true})
        Axios.get('/api/report/sales', {
            params: { notattr }

        })
        .then(res => res.data)
            .then((sales) => {
                this.setState({
                    sales,
                    isLoading: false,
                    handleGrouping: true,
                    activePage: 1,
                    currentRange: {
                        first: (this.state.itemsPerPage) - this.state.itemsPerPage,
                        last: (this.state.itemsPerPage) - 1
                    },
                    orderBy: ''
                })
            })
            .catch((err) => {
                this.setState({isLoading: false})
                console.log(err)
            })
    };

基本问题场景1:
1) 我正在打开页面;
- 屏幕中的复选框true;
2)我点击搜索按钮;
- API 发送 noattr:0 因为 grouping:true;
3)现在,我想单击复选框;
- API 仍然发送noattr:0,因为grouping:true(但我期待grouping:false值)< br/> 4)如果我稍后处理复选框,反之亦然。但如果我处理搜索按钮,它会发送 OK 信息。
显然某处有小错误,但我尝试了很多不同的组合,但似乎没有找到正确的组合。

最佳答案

      onGroupingChange = (e) => {
         const {grouping} = this.state;
        this.setState({ grouping: e.target.checked});
             this.getSales(grouping);
    };

我认为你应该这样调用: this.getSales(e.target.checked)

您正在使用以前的值而不是更新后的值调用 getSales 函数。

关于javascript - React 输入复选框不间接更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58589084/

相关文章:

javascript - 使用 Apollo 客户端进行 useMutation 后未触发 useEffect

javascript - 使用react-select时重置值

css - 自定义复选框/ radio 设计怪异

javascript - 从数据绑定(bind) list 中进行 jQuery 查找

javascript - 为什么 TypeScript 在使用 .includes 搜索数组中的字符串时会抛出错误?

javascript - React 中切换路由后引用为空

javascript - 使用 JavaScript 包含文件

javascript - 当其中的输入具有焦点时,保持非事件导航选项卡显示

javascript - 将 React 组件与 Pux 集成——require() 从何而来?

python - 我在 Django 1.5 中使用的 "select all" header 复选框在 Django 1.9 中丢失