React Native:尝试分配给readonly属性

时间:2015-11-30 13:37:47

标签: javascript reactjs react-native javascript-objects

我正在尝试检查AsycStore中是否存在该条目,如果它不存在,那么我创建一个对象并进行设置。 并且有一个返回语句返回数据对象。

这是伪代码 -

AsyncStorage.getItem("dataobject").then((do) => {
  if(do == undefined)
  {
    console.log("initializing obj + setting data");
    var dobj = "data object";
    dobj.isdirty = true;
    AsyncStorage.setItem("dataobject",dobj);
  }
  return AsyncStorage.getItem("dataobject");
}).done();
},

我在控制台中收到错误 -

W/ReactNativeJS: 'Error: Attempted to assign to readonly property.\n stack: \n  <unknown>

index.android.bun…:53047\n  tryCallOne                           
index.android.bun…:5094\n  <unknown>                            
index.android.bun…:5160\n  <unknown>                            
index.android.bun…:3399\n  callTimer                            
index.android.bun…:2954\n  callImmediates                       
index.android.bun…:3003\n  <unknown>                            
index.android.bun…:2523\n  guard                                
index.android.bun…:2452\n  __callImmediates                     
index.android.bun…:2523\n  <unknown>                            
index.android.bun…:2503\n  guard                                
index.android.bun…:2452\n  invokeCallbackAndReturnFlushedQueue  index.android.bun…:2501\n URL: http://localhost:8081/index.android.bundle?platform=android&dev=true\n line: 53047\n message: Attempted to assign to readonly property.'

我不确定我要分配的readonly属性是什么。正在警告的行号是这一行 - &#34; dobj.isdirty = true&#34 ;;

我不应该向对象添加属性吗?我该如何解决这个问题?做正确的方法是什么?

截图 -

Attempted to assign to readonly property width=100

2 个答案:

答案 0 :(得分:3)

你可以通过使用.catch来实现这一点,如果那里没有值,它应该抛出。类似的东西:

AsyncStorage.getItem("dataobject")
.then((do) => {
  this.setState({
    myData: do.toJSON();
  })
})
.catch(() => {
   console.log("initializing obj + setting data");
   var dobj = {};
   dobj.isdirty = true;
   AsyncStorage.setItem("dataobject",JSON.stringify(dobj));
});

答案 1 :(得分:-2)

dobj是字符串还是对象?

var dobj = "data object"; dobj.isdirty = true;

在第二行中,dobj.isdirty未定义,您正在尝试设置它(&#34; undefined&#34;是JS的只读属性)。

现在,如果您正在尝试

var dobj = {}; dobj.isdirty = true;

然后你应该做

var dobj = {}; dobj['isdirty'] = true;

OR

var dobj = {isdirty: true};