ReactJS:reloading/re-rendering 点击时的组件

ReactJS: reloading/re-rendering a component on click

我有一个名为 "categories" 的组件,其中有 2 个按钮处于活动状态和非活动状态。每个按钮调用 api 来激活或停用所选记录。但是,按钮部分和 api 部分 运行 完全没问题,并且在完成任务后得到了正确的响应。但是,在 api 响应返回成功代码后,我需要 "categories" 组件到 reload/re-render。

我在谷歌上搜索了解决方案,但得到的答案让我有点困惑,因为我目前正在学习 ReactJS。

这是我的代码:

...

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>

    ...
}

这个代码也可以是reduced/optimized..?

我找到了解决方案(我从另一个答案中得到了一个想法,但不幸的是我失去了那个link。如果我再次找到它,我会粘贴它).

这是我的解决方案:

...

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>
        }
        ...
    )
}

我希望这对某些人有用。但是,如果有任何改进的余地,请告诉我。 :)