我想在渲染方法的回归中使用if
语句,我的意思是这样的:
export default class App extends Component
{
render()
{
return(
<View>
if(this.state.error)
{
<View>
<Image source={{"error"}} />
<Text>An Error Happen</Text>
</View>
}
else
{
<View>
<List dataArray={this.state.items}></List>
</View>
}
</View>
);
}
}
我可以使用三元运算符,但我想要的是尽可能使用if
语句
答案 0 :(得分:5)
这很简单:
render()
{
return(
<View>
{this.state.error ?
(<View>
<Image source={{"error"}} />
<Text>An Error Happen</Text>
</View>)
:
(<View>
<List dataArray={this.state.items}></List>
</View>)
}
</View>
);
}
也许可以帮到你:)。
答案 1 :(得分:2)
语句和表达式有什么区别
请参阅:What is the difference between an expression and a statement?
特定于JavaScript:
What is the difference between an expression and a statement in JS?
JavaScript: declarations vs expressions vs statements
return
需要一个表达式作为参数。如果 statement 不是表达式(这是有意义的,因为statement是名称)。
JSX的实现细节(用<Tags>
填充,但使用javascript也同样重要)。 JSX被编译为普通JavaScript。
<MyButton color="blue" shadowSize={2}>
Click Me
</MyButton>
编译为
React.createElement(
MyButton,
{color: 'blue', shadowSize: 2},
'Click Me'
)
如果要在JSX中评估JavaScript表达式,则需要将其用花括号括起来。
const myButtonColor = 'blue'
...
<MyButton color={myButtonColor} shadowSize={2}>
Click Me
</MyButton>
完成类似if的功能的方式:
&&
)让我们看一些示例:
render() {
return (
<View>
{this.state.error && <Text> There's an error! </Text>}
</View>
)
}
此方法最简单,建议您先尝试一下。当条件评估为false时,您不想执行任何操作时,这很有意义。与其他语言相比,&&
的行为different in javascript有点。当this.state.error
的计算结果为false时,render返回this.state.error,如果this.state.error
恰好是空字符串或0
,则呈现unintended consequences。
render() {
return (
<View>
{this.state.error ? <Text>Error!</Text> : <Text>No Error!</Text>
</View>
)
}
最大的问题是行长很快。您可以使用括号来解决这个问题。
render() {
return (
<View>
{this.state.error ? (
<Text>Long, detailed error message</Text>
) : (
<Text>No Error!</Text>
)}
</View>
)
}
您也可以使用此方法返回之前声明的JavaScript字符串。
render() {
if(this.state.error) {
return (<Text>Long, detailed error message</Text>)
}
else {
return (<Text>No Error!</Text>)
}
}
此方法的问题是,如果您有一个长的render方法和一个小的条件更改,则必须在每个if块中几乎重复执行render函数。我通常将此方法作为一种手段。
答案 2 :(得分:1)
你可以这样做:
render()
{
return(
<View>
{this.state.error &&
<View>
<Image source={{"error"}} />
<Text>An Error Happen</Text>
</View>
}
{!this.state.error &&
<View>
<List dataArray={this.state.items}></List>
</View>
}
</View>
);
}
答案 3 :(得分:1)
你应该尝试这样的事情:
export default class App extends Component {
render() {
if(this.state.error)
{
return (
<View>
<Image source={{"error"}} />
<Text>An Error Happen</Text>
</View>
)
}
else {
return (
<View>
<List dataArray={this.state.items}></List>
</View>
);
}
}
}
答案 4 :(得分:1)
我建议在这种情况下利用js:
{ this.state.error &&
<View>
<Text>show error</Text>
</View>
}
{ !this.state.error &&
<View>
<Text>all good</Text>
</View>
}
在某些情况下,它看起来比三元更好。