Reactjs 如果访问某些属性,React JSX表单字段映射将失败

Reactjs 如果访问某些属性,React JSX表单字段映射将失败,reactjs,jsx,Reactjs,Jsx,我试图从表单字段数组中构建表单,其中每个表单字段如下所示: { "name": "state", "resource": "customer", "type": "TextBox", "assetId": "State", "label": { "text"

我试图从表单字段数组中构建表单,其中每个表单字段如下所示:

{
   "name": "state",
   "resource": "customer",
   "type": "TextBox",
   "assetId": "State",
   "label": {
       "text": "State",
       "assetId": "Label"
   }
}
但是,当我尝试使用JSX映射它时,如果我访问对象的某些属性,字段将无法成功显示。采用以下正确运行的代码:

formfields.map(function (formfield, i) {
    var returnfield = <div key={i}>{formfield.name}</div>;
    switch (formfield.type) {
        case "TextBox":
            console.log(formfield.label);
            returnfield = (
                <div key={i}>
                    <label htmlFor="theinput">{formfield.name}</label>
                    <input id="theinput" type="text" value={formfield.name} />
                </div>
            );
            break;
    }
    return returnfield;
});
formfields.map(函数(formfield,i){
var returnfield={formfield.name};
开关(formfield.type){
案例“文本框”:
console.log(formfield.label);
返回字段=(
{formfield.name}
);
打破
}
返回字段;
});
并将其与失败的代码进行比较:

formfields.map(function (formfield, i) {
    var returnfield = <div key={i}>{formfield.name}</div>;
    switch (formfield.type) {
        case "TextBox":
            console.log(formfield.label.text);
            returnfield = (
                <div key={i}>
                    <label htmlFor="theinput">{formfield.name}</label>
                    <input id="theinput" type="text" value={formfield.name} />
                </div>
            );
            break;
    }
    return returnfield;
});   
formfields.map(函数(formfield,i){
var returnfield={formfield.name};
开关(formfield.type){
案例“文本框”:
console.log(formfield.label.text);
返回字段=(
{formfield.name}
);
打破
}
返回字段;
});   
敏锐的观察者会注意到,两者之间的唯一区别在于,在第二种情况下,我们记录的是formfield.label.text,而不是formfield.label

我完全不明白为什么仅仅记录一个对象的孙子属性就会导致表单显示为空(即没有字段)。也许我遇到了保留的名字或什么?任何想法都值得赞赏

为什么我在开发人员控制台中没有看到javascript错误?是否存在.map()不允许引发错误的奇怪情况

在认识到在您的项目中需要检查null之后,我建议您使用javascript函数编程的一些概念来编写一个函数,在将它们应用于逻辑之前检查错误的值

您可以使用Maybe函子返回立即停止的Maybe(null)。在将空值返回到逻辑并导致爆炸之前

您也可以使用,这很酷,因为它就像maybe一样,但是如果值是错误的,您也可以使用一些逻辑来运行

对于这些建议,我有两个例子(摘自jsbin)

//Key container==映射可以像对象或数组一样迭代的对象。
//我说的是lodash/ramda.js curried映射,它可以迭代对象,而不是js本机对象。
//也许用
//网址http://jsbin.com/yumog/edit?js安慰
var safeGet=uu.curry(函数(x,o){
可能返回(o[x]);
//这可能会返回(null)
//如果在容器中找不到某个属性
//你可以在打碎东西之前检查一下
});
var user={id:2,名称:“Albert”}
var ex3=compose(map(u.head),safeGet('name');
assertDeepEqual(可能是('A'),ex3(用户))
log(“练习3…确定!”)
//使用任意一个.io
//网址http://output.jsbin.com/bexuc/
//编写一个使用checkActive()的函数
//和showWelcome()授予访问权限或返回错误
var showWelcome=compose(u.add(“Welcome”)、u.get(“name”))
//这里要么返回一个函数,如果它是真的,就在右边给它
//如果是假的就离开(或者是falsy我不懂英语..)
//因此,如果容器中的属性不存在,您可以执行一些操作。
var checkActive=功能(用户){
return user.active?Right(user):Left('您的帐户未激活')
}
var ex1=compose(映射(showWelcome),选中active);
assertDeepEqual(左('您的帐户未激活'),ex1({active:false,名称:'Gary'}))
assertDeepEqual(右('Welcome Theresa'),ex1({active:true,name:'Theresa'}))
为什么我在开发人员控制台中没有看到javascript错误?是否存在.map()不允许引发错误的奇怪情况

在认识到在您的项目中需要检查null之后,我建议您使用javascript函数编程的一些概念来编写一个函数,在将它们应用于逻辑之前检查错误的值

您可以使用Maybe函子返回立即停止的Maybe(null)。在将空值返回到逻辑并导致爆炸之前

您也可以使用,这很酷,因为它就像maybe一样,但是如果值是错误的,您也可以使用一些逻辑来运行

对于这些建议,我有两个例子(摘自jsbin)

//Key container==映射可以像对象或数组一样迭代的对象。
//我说的是lodash/ramda.js curried映射,它可以迭代对象,而不是js本机对象。
//也许用
//网址http://jsbin.com/yumog/edit?js安慰
var safeGet=uu.curry(函数(x,o){
可能返回(o[x]);
//这可能会返回(null)
//如果在容器中找不到某个属性
//你可以在打碎东西之前检查一下
});
var user={id:2,名称:“Albert”}
var ex3=compose(map(u.head),safeGet('name');
assertDeepEqual(可能是('A'),ex3(用户))
log(“练习3…确定!”)
//使用任意一个.io
//网址http://output.jsbin.com/bexuc/
//编写一个使用checkActive()的函数
//和showWelcome()授予访问权限或返回错误
var showWelcome=compose(u.add(“Welcome”)、u.get(“name”))
//这里要么返回一个函数,如果它是真的,就在右边给它
//如果是假的就离开(或者是falsy我不懂英语..)
//因此,如果容器中的属性不存在,您可以执行一些操作。
var checkActive=功能(用户){
return user.active?Right(user):Left('您的帐户未激活')
}
var ex1=compose(映射(showWelcome),选中active);
assertDeepEqual(左('您的帐户未激活'),