React学习:条件渲染

Posted liyaping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React学习:条件渲染相关的知识,希望对你有一定的参考价值。

在react中的条件渲染和Vue不一样,react使用的是:使用不同的组件进行封装,然后根据使用的场景再来判断使用哪一个组件

React中的条件渲染和js中的一样,使用js或者其他条件运算符进行不同组件的渲染

1.元素变量

可以使用变量来储存元素。 它可以帮助你有条件地渲染组件的一部分,而其他的渲染部分并不会因此而改变。

//元素变量
function LoginButton(props) 
    return (
        <button onClick=props.onClick> 
            Login
        </button>
    )

function LogoutButton(props) 
    return (
        <button onClick=props.onClick>
            Logout
        </button>
    )

class LoginControl extends React.Component
    constructor(props) 
        super(props);
        this.handleLoginClick = this.handleLoginClick.bind(this);
        this.handleLogoutClick = this.handleLogoutClick.bind(this);
        this.state = isLoggedIn:false
    
    handleLoginClick()
        this.setState(
            isLoggedIn:true
        )
    
    handleLogoutClick()
        this.setState(
            isLoggedIn:false
        )
    
    render()
        const isLoggedIn = this.state.isLoggedIn;
        let button;
        if (isLoggedIn) 
            button = <LogoutButton onClick=this.handleLogoutClick></LogoutButton>
         else 
            button = <LoginButton onClick = this.handleLoginClick></LoginButton>
        
        return (
            <div>
                <Greeting isLoggedIn = isLoggedIn />
                button
            </div>
        )
    

ReactDOM.render(<LoginControl 
/>, document.getElementById(‘root‘));
 

2.运算符&&

通过大括号来包裹代码,来判断是否渲染&&后面的代码

function Mailbox(props) 
    const unreadMessages = props.unreadMessages;
    return (
      <div>
        <h1>Hello!</h1>
        unreadMessages.length > 0 &&
          <h2>
            You have unreadMessages.length unread messages.
          </h2>
        
      </div>
    );
  
  const messages = [‘React‘, ‘Re: React‘, ‘Re:Re: React‘];
//   const messages = [];
ReactDOM.render(  <Mailbox unreadMessages=messages />, document.getElementById(‘root‘));
之所以能这样做,是因为在 javascript 中,true && expression 总是会返回 expression, 而 false && expression 总是会返回 false。
因此,如果条件是 true,&& 右侧的元素就会被渲染,如果是 false,React 会忽略并跳过它。

3.三元运算符condition?true:false

condition?(true expression)/true:(false expression)/ false

此处可以是用表达式或者字符串都可以。如果是较为复杂的表达式,建议使用组件抽离

4.组件的渲染阻止

function WarningBanner(props) 
    if (!props.warn)  // 根据传入参数warn进行判断是否进行渲染,如果不进行渲染的话,return null。
      return null;
    
  
    return (
      <div className="warning">
        Warning!
      </div>
    );
  
  
  class Page extends React.Component 
    constructor(props) 
      super(props);
      this.state = showWarning: true;
      this.handleToggleClick = this.handleToggleClick.bind(this);
    
  
    handleToggleClick() 
      this.setState(state => (
        showWarning: !state.showWarning
      ));
    
  
    render() 
      return (
        <div>
          <WarningBanner warn=this.state.showWarning />
          <button onClick=this.handleToggleClick>
            this.state.showWarning ? ‘Hide‘ : ‘Show‘
          </button>
        </div>
      );
    
  

在组件的render函数中书写return null 并不会影响组件的生命周期函数的执行,例如上述组件的componentDidUpdate依旧会执行

 

 

以上是关于React学习:条件渲染的主要内容,如果未能解决你的问题,请参考以下文章

react渲染原理分析

React学习笔记 - 元素渲染

基于用户输入的条件渲染

React学习第二步,JSX基础以及给JSX添加样式

React开发学习02-React 与 Hook 应用(React数据获取与渲染)

react 学习demo 路由网络渲染数据和 解析html