从函数返回JSX [英] Return JSX from function
问题描述
我有一个组件,需要检查多个选项并根据这些选项返回.因此,我创建了一个在组件return语句中调用的外部函数,以确定将返回的格式:
I have a a component that needs to check for multiple options and return based on those options. Therefore I have created an outside function that is called in my component return statement to determine the format that will be returned:
render() {
const { policy } = this.props;
let deployment = policy.Deployment;
let value = policy.value;
let policyLegend = deployment.policyLegend;
let policyObj = this.valueToPolicy(policyLegend, value);
console.log(policyObj);
if(policy.name == "SP4") {
policyLegend[1].values = this.formatSp4Firmware(policyLegend[1]);
return (
<div>
<Form onSubmit={ (event) => this.handleSubmit(event, this.props) }>
{
policyLegend.map((policy) => {
return (
<div key={ policy.id }>
<h3>{ policy.displayName }</h3>
{ this.renderSp4Policies(policy) }
</div>
);
})
}
<Button name={ 'Submit' } type='submit'>Submit</Button>
<Button onClick={ this.props.onCancel }>Cancel</Button>
</Form>
</div>
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
renderSp4Policies(policy) {
if(policy.displayName == "Firmware Options") {
let firmwareDropdownNames = this.formatFirmawareDropdownNames(policy);
let toggles = policy.values[0][Object.keys(policy.values[0])];
let toggleOptions = []
Object.keys(toggles).map(toggle => {
if(typeof(toggles[toggle]) == "boolean"){
var obj = {};
obj[toggle] = toggles[toggle];
toggleOptions.push(obj);
}
})
return (
toggleOptions.map(toggleOption => {
let toggleName = Object.keys(toggleOption).toString();
return (
<Form.Field key={ toggleName }>
<label>{ toggleName }</label>
<Checkbox toggle />
</Form.Field>
)
})
)
} else {
return (
policy.values.map(value => {
return(
<Form.Field key={ value.name }>
<label>{ value.displayName || value.name }</label>
<Checkbox toggle />
</Form.Field>
)
}
)
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
编辑
我已经给出了一些成功的答案.
I have applied some of the answers given with moderate success.
在renderSp4Policies
内显示else
语句中返回的内容,但开头的if(policy.displayName == "Firmware Options")
不返回任何内容.
Within renderSp4Policies
what is being returned in the else
statement displays, but the beginning if(policy.displayName == "Firmware Options")
returns nothing.
感谢所有建议,在此先谢谢您!
Appreciate all advice, thank you in advance!
推荐答案
您的map
函数不返回任何内容:
Your map
function doesn't return anything:
policy.values.map(value => {
<Form.Field key={ value.name }>
<label>{ value.displayName || value.name }</label>
<Checkbox toggle />
</Form.Field>
}
使用箭头功能块{}
时,应添加一个明确的return
语句:
When using an arrow function block {}
you should add an explicit return
statement:
policy.values.map(value => {
return(<Form.Field key={ value.name }>
<label>{ value.displayName || value.name }</label>
<Checkbox toggle />
</Form.Field>)
}
修改
作为您的评论的后续行动.
Edit
As a followup to your comment.
对于第一个if
语句,请不要使用forEach
,请使用map
.与您在第二个if
语句中所做的相同(请不要忘记return
!)
As for the first if
statement, don't use a forEach
, use a map
. same as you did in the second if
statement (don't forget the return
!)
renderSp4Policies(policy) {
if (policy.displayName == "Firmware Options") {
let toggles = policy.values[0][Object.keys(policy.values[0])];
Object.keys(toggles).forEach(toggle => {
if (typeof (toggles[toggle]) !== "boolean") {
delete toggles[toggle];
}
})
return (
Object.keys(toggles).map(toggle => {
return (
<Form.Field key={toggle}>
<label> {toggle} </label>
<Checkbox toggle />
</Form.Field>
);
})
)
} else {
return (
policy.values.map(value => {
<Form.Field key={value.name}>
<label>{value.displayName || value.name}</label>
<Checkbox toggle />
</Form.Field>
})
);
}
}
这篇关于从函数返回JSX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!