【问题标题】:ReactJS: reloading/re-rendering a component on clickReactJS:单击时重新加载/重新渲染组件
【发布时间】:2019-07-20 09:19:58
【问题描述】:

我有一个名为“类别”的组件,其中有 2 个按钮处于活动状态和非活动状态。每个按钮调用一个 api 来激活或停用选定的记录。但是,按钮部分和 api 部分运行良好,并且在完成任务后得到了正确的响应。但是,我需要在 api 响应返回成功代码后重新加载/重新渲染“类别”组件。

我在谷歌上搜索了解决方案,但得到的答案对我来说有点混乱,因为我目前正在学习 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>

    ...
}

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

【问题讨论】:

    标签: reactjs components refresh reload


    【解决方案1】:

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

    这是我的解决方案:

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

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

    【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2020-06-20
    • 2019-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多