【发布时间】:2018-06-18 01:03:34
【问题描述】:
问题
我对组件的条件渲染有疑问。据我所知,有两种方法可以做到这一点。第一种方法很难看,因为当我必须执行多个 && 条件时会变得很困难。第二种方法很清楚,但是它将组件本身添加到状态中,并且很难使用状态值进行进一步的计算。例如检查错误的消息值是什么。
我已经给出了以下两种方法。请让我知道哪个会更好。除了这两种方法之外,还有其他方法吗?
应用
这是一个简单的应用程序,它根据第一种方法中的 'err' 属性的状态和第二种方法中的 comp 属性的内容来呈现 'Main' 组件或 'Err' 组件。
最初主要组件被渲染。 err 属性在 2 秒后更新为某个值,这会触发重新渲染。这时候我想让 Err 组件渲染出来。
真正的应用程序是我在 componentDidMount 上有一个外部 api 调用,它可能失败或成功。我必须根据结果显示不同的组件。更新多个状态值会稍微复杂一些。为了演示的目的,我已经简化了下面的问题。
两种类型的通用步骤
npx create-react-app react-oop
组件/Err.js
import React,{Component} from 'react'
class Err extends Component {
render(){
return(
<div>
Error Component
</div>
)
}
}
export default Err
组件/Main.js
import React, {Component} from 'react'
class Main extends Component {
render(){
return(
<div>
Main Component
</div>
)
}
}
export default Main
第一种方法
App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Err from './components/Err'
import Main from './components/Main'
class App extends Component {
constructor(props){
super(props)
this.state = {
err: null
}
this.setError = this.setError.bind(this)
}
setError(){
return(
this.setState(() => {
return({
err: 'Error'
})
})
)
}
componentDidMount(){
setTimeout(this.setError, 2000)
}
render() {
return (
<div className="App">
{
this.state.err ? <Err /> : <Main />
}
</div>
);
}
}
export default App;
第二种方法
App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Err from './components/Err'
import Main from './components/Main'
class App extends Component {
constructor(props){
super(props)
this.state = {
comp: <Main />
}
this.setError = this.setError.bind(this)
}
setError(){
return(
this.setState(() => {
return({
comp: <Err />
})
})
)
}
componentDidMount(){
setTimeout(this.setError, 2000)
}
render() {
return (
<div className="App">
{this.state.comp}
</div>
);
}
}
export default App;
【问题讨论】:
标签: reactjs