代码之家  ›  专栏  ›  技术社区  ›  Mr.Singh PHP Worm...

ReactJS:单击时重新加载/重新呈现组件

  •  0
  • Mr.Singh PHP Worm...  · 技术社区  · 6 年前

    我有一个名为“categories”的组件,其中有两个按钮是active和inactive。每个按钮都调用一个api来激活或停用所选记录。但是,按钮部分和api部分运行得非常好,并且在完成任务后得到了正确的响应。但是,我需要“categories”组件在api响应返回成功代码后重新加载/呈现。

    这是我的密码:

    ...
    
    setInactive(e)
    {
        Axios
            .get("/api/category/deactivate/" + $(e.currentTarget).data('token'))
            .then((response) => {
                if (response.data.success == true)
                {
                    this.setState({
                        state: this.state
                    });
                }
            });
    }
    
    setActive(e)
    {
        Axios
            .get("/api/category/reactivate/" + $(e.currentTarget).data('token'))
            .then(response => {
                if (response.data.success == true)
                {
                    this.setState({
                        state: this.state
                    });
                }
            });
    }
    
    render()
    {
        ...
    
        (category.status == "Y")
            ? <button data-token={category.token} className="lightRed" onClick={this.setInactive}>Inactive</button>
            : <button data-token={category.token} className="green" onClick={this.setActive}>Active</button>
    
        ...
    }
    

    也可以减少/优化此代码。。?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Mr.Singh PHP Worm...    6 年前

    (我从另一个答案中得到了一个想法,但不幸的是,我失去了这个链接。如果我再找到的话,我会粘贴它) .

    以下是我的解决方案:

    ...
    
    componentWillMount()
    {
        this.fetchData();
    }
    
    fetchData()
    {
        Axios
            .get("/api/categories")
            .then(response => this.setPagination(response.data));
    }
    
    setStatus(token, status)
    {
        Axios
            .get("/api/category/status/" + token + "/" + status)
            .then((response) => {
                if (response.data.success == true)
                {
                    this.setState({
                        message: <Alerts alertClass="alert-success">
                            Category status has been modified successfully.
                        </Alerts>
                    });
                    this.fetchData();
                }
                else
                {
                    this.setState({
                        message: <Alerts alertClass="alert-danger">
                            {response.data.message}
                        </Alerts>
                    });
                }
            });
    }
    
    setPagination(response)
    {
        this.setState({
            categories: response.data,
            totalItemsCount: response.total,
            itemsCountPerPage: response.per_page,
            activePage: response.current_page,
    
            paginationIndex: ((response.current_page - 1) > 0)
                ? (((response.current_page - 1) * response.per_page) + 1)
                : 1
        });
    }
    
    pagination(pageNumber)
    {
        Axios
            .get("/api/categories?page=" + pageNumber)
            .then(response => this.setPagination(response.data));
    
        this.setState({
            activePage: pageNumber
        });
    }
    
    render()
    {
        return (
            ...
            {
                (category.status == "Y")
                    ? <button className="buttons tiny lightRed" onClick={() => 
                          this.setStatus(category.token, 'N')
                      }>Inactive</button>
                    : <button className="buttons tiny green" onClick={() => 
                          this.setStatus(category.token, 'Y')
                      }>Active</button>
            }
            ...
        )
    }