2016-08-10 4 views
1

JSXでこれを行う方法が不思議です。下のコードを見ると、重複部分があり、<div className={`${cssComponentName}-container`}>がJSXをラップするために使用されています。 JSXで「単一ルート」問題に遭遇することなく、if/elseループと単一のreturn文の外でこれを行うにはどうすればよいですか。ステートレス機能を用いて、以下の可能形で再構成することができるJSXで「単一ルート」問題が発生しないようにJSXを連結する方法

buildComponent() { 
const { element: {title, type, items }, name } = this.props; 
const cssComponentName = name.toLowerCase(); 
if (type === 'string' || type === 'number') { 
    return (
    <div className={`${cssComponentName}-container`}> 
     <label htmlFor={name}>{title}</label> 
     <input type="text" name={name} /> 
    </div> 
); 
} 

if (type === 'array') { 
    return (
    <div className={`${cssComponentName}-container`}> 
     <label htmlFor={name}>{title}</label> 
     <select name={name}> 
     { this.buildDropdown(items.enum, items.enumNames) } 
     </select> 
    </div> 
); 
} 

}

答えて

1

また、このアプローチを試みることがあります。

buildElement(type, name, items) { 
    if (type === 'string' || type === 'number') 
    return buildInput(name); 
    else if (type === 'array') 
     return buildSelect(name, items); 
}  

buildSelect(name, items) { 
    return (<select name={name}> 
      { this.buildDropdown(items.enum, items.enumNames) } 
      </select>); 
}  

buildInput(name) { 
    return (<input type="text" name={name} />); 
}  

buildComponent() { 
    const { element: {title, type, items }, name } = this.props; 
    const cssComponentName = name.toLowerCase(); 

    return (
    <div className={`${cssComponentName}-container`}> 
    <label htmlFor={name}>{title}</label> 
    {this.buildElement(type, name, items)} 
    </div> 
); 
} 
関連する問題