所以我有这个小的生成器,显示的信息应该对应于数据库中填充的值,下面的示例是一个物理地址
this.setState({
companyEmail: json.data.companyEmail,
company: json.data.company,
line1: json.data.line1,
line2: json.data.line2,
city: json.data.city,
...
});
所以我可以用null
,undefined
或""
初始化这些值,这没关系,在获取请求时,这些空值的类型变成未定义。
Firebase不喜欢那样,对我来说它不会造成任何问题,我可以像这样检查真假来隐藏元素
{line1 && <span>{line1}<br /></span>}
{line2 && <span>{line2}<br /></span>}
好吧,我的意思是说直到我尝试更新数据库之前,它都起作用了,我得到了这个错误
错误:Reference.set失败:第一个参数包含未定义的 属性“ master.business.info.line2”
我想要做的是将undefined更改为null,因为当发送null时,从数据库中删除该子项,将其视为真实值。
在服务器端,这是常规的数据库更新
master.update({
company: company,
line1: line1,
line2: line2,
city: city,
...
})
.then(() => {
response.sendStatus(200);
}).catch(function (err) {
console.log(err);
response.sendStatus(204);
});
我可以相应地使用if语句和setState,但是这太多了。我需要获取请求,因为我需要这些值,这是一种编辑信息的表格。
使用""
这样的空字符串也不好,它会显示在跨度,段落或其他任何内容内。
这不是重复的,在react.js上,我的目标是不要为未定义的值设置setState并将初始化值保留在构造函数上。
答案 0 :(得分:1)
也许如果您这样更改setState:
const {companyEmail, company, line1, line2, city} = json.data;
this.setState({
companyEmail,
company,
line1,
line2,
city,
...
});
如果任何var没有值,它也不会添加到状态。
在这里,您可以在更新之前进行检查。尝试这样的事情:
const objUpdate = {
company: company,
line1: line1,
line2: line2,
city: city,
...
};
const cloneObjUpdate = {...objUpdate};
Object.keys(objUpdate).forEach(key=>{
if(!Boolean(cloneObjUpdate[key])) delete cloneObjUpdate[key];
});
master.update(cloneObjUpdate);
对于保留具有null
值的对象,只需移除delete
并设置一个null
值:
const objUpdate = {
company: company,
line1: line1,
line2: line2,
city: city,
...
};
const cloneObjUpdate = {...objUpdate};
Object.keys(objUpdate).forEach(key=>{
if(!Boolean(cloneObjUpdate[key])) cloneObjUpdate[key] = null;
});