首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setState不设置值

setState不设置值
EN

Stack Overflow用户
提问于 2018-10-23 08:51:59
回答 1查看 123关注 0票数 0

我们为我们的学校项目提供了一个ReactJS前端。我们得为它做一个拉拉维尔的后端。我使用一个API从数据库中获取仪表板布局。当前的前端使用了这个变量:

代码语言:javascript
复制
const originalLayouts = getFromLS("layouts") || [];

要使用此函数从本地存储设置状态,请执行以下操作:

代码语言:javascript
复制
function getFromLS(key) {
    let ls = {};
    if (global.localStorage) {
        try {
            ls = JSON.parse(global.localStorage.getItem("rgl-8")) || {};
        } catch (e) {
            /*Ignore*/
        }
    }
    return ls[key];
}

州设置的地方:

代码语言:javascript
复制
this.state = {
            items: originalLayouts.map(function(i, key, list) {
                return {
                    i: originalLayouts[key].i,
                    x: originalLayouts[key].x,
                    y: originalLayouts[key].y,
                    w: originalLayouts[key].w,
                    h: originalLayouts[key].h,
                    widget: originalLayouts[key].widget,
                    minW: originalLayouts[key].minW,
                    minH: originalLayouts[key].minH,
                    maxH: originalLayouts[key].maxH
                };
            }),
            selectedOption: '',
            newCounter: originalLayouts.length
        };

为了从数据库中获取数据并将数据放入items状态,我执行了以下函数:

代码语言:javascript
复制
loadData = () => {

        let dashboardId = 1;

        return axios
            .get('api/dashboards/' + dashboardId)
                .then(result => {
                    console.log(result);
                    this.setState({
                        originalLayouts: result.data,
                        selectedOption: '',
                        newCounter: originalLayouts.length
                    });
                    console.log(result.data);
                })
                .catch(error => {
                    console.error('error: ', error);
                })
    };

我在componentDidMount中调用这个函数:

代码语言:javascript
复制
componentDidMount() {
    this.loadData();
}

当我控制台日志结果时,它向我显示如下:

代码语言:javascript
复制
 data: Array(2), status: 200, statusText: "OK", headers: {…}, config: {…}, …}
config: {adapter: ƒ, transformRequest: {…}, transformResponse: {…}, timeout: 0, xsrfCookieName: "XSRF-TOKEN", …}
data: (2) [{…}, {…}]
headers: {date: "Tue, 23 Oct 2018 08:18:41 +0000, Tue, 23 Oct 2018 08:18:41 GMT", host: "127.0.0.1:8000", x-powered-by: "PHP/7.2.3", x-ratelimit-remaining: "58", content-type: "application/json", …}
request: XMLHttpRequest {onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
status: 200
statusText: "OK"
__proto__: Object

当我控制台日志result.data时,我得到:

代码语言:javascript
复制
(2) [{…}, {…}]
0: {id: 1, dashboardId: 1, w: 2, h: 5, x: 0, …}
1: {id: 2, dashboardId: 1, w: 2, h: 1, x: 0, …}
length: 2
__proto__: Array(0)

为什么originalLayouts不使用数组中的数据进行设置?这是因为我的数组中也有一个dashboardIdid吗?我还认为它可以设置状态,因为它使用了可验证的originalLayouts。还是我还在我的职责中遗漏了什么?我的反应不是很有经验,所以任何帮助都是有用的。

更新:

我改变了:

代码语言:javascript
复制
this.setState({
    originalLayouts: result.data,
    selectedOption: '',
    newCounter: originalLayouts.length
});

至:

代码语言:javascript
复制
this.setState({
    items: result.data,
    selectedOption: '',
    newCounter: originalLayouts.length
});

这给了我一个错误:

代码语言:javascript
复制
Uncaught Error: ReactGridLayout: ReactGridLayout.children[0].static must be a boolean!

所以这可能意味着我现在没有正确地设置属性。

更新2:

在我的数据库中,属性movedstatic保存为0而不是false。因此,我将这些属性更改为false,但仍然有相同的错误:

代码语言:javascript
复制
ReactGridLayout: ReactGridLayout.children[0].static must be a boolean!
EN

回答 1

Stack Overflow用户

发布于 2018-10-23 09:03:02

在您的loadData()中,您正在设置"originalLayouts“的状态,但是您的初始状态中的键是"items”。你试过这么做吗?

代码语言:javascript
复制
this.setState({
                items: result.data, // Here put items instead of originalLayouts
                selectedOption: '',
                newCounter: originalLayouts.length
              });

然后你可以打电话给this.state.items来得到你的result.data

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52944928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档