【问题标题】:What is v-if in react什么是 v-if 在反应
【发布时间】:2022-01-19 14:16:55
【问题描述】:

反应中的 v-if 是什么?我试过了,但是当加载数据发生变化时,我的加载类的 div 不起作用,所以 div 不会重新渲染自己。 代码在这里:

{
    loading &&
    <div className="loading"></div>
}

我正在使用函数更改加载,该函数与 onclick 事件一起使用。

我的所有代码:

import React from "react";
import axios from "axios";
export class LoginPage extends React.Component{
    render(){
        let username = '',
            password = '',
            loading = false

        function login(){
            loading = true;
            console.log(loading)
        }

        return (
            <div className="App">
                <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"
                      integrity="sha512-Fo3rlrZj/k7ujTnHg4CGR2D7kSs0v4LLanw2qksYuRlEzO+tcaEPQogQ0KaoGN26/zrn20ImR1DfuLWnOo7aBA=="
                      crossOrigin="anonymous" referrerpolicy="no-referrer"/>
                        {
                            loading &&
                            <div className="loading"></div>
                        }
                <div className="login">
                    <h1>Login/Register</h1>
                    <div>
                        <i className="fas fa-user"></i>
                        <input type="text" onChange={(e) => username = e.target.value} placeholder="Username" maxLength="15"/>
                    </div>
                    <div>
                        <i className="fas fa-lock"></i>
                        <input type="Password" placeholder="Password" onChange={(e) => password = e.target.value} maxLength="18"/>
                    </div>
                    <button onClick={() => login()}>Login/Register</button>
                </div>
            </div>
        );
    }
}

【问题讨论】:

  • 你如何更改loading 变量?
  • 有一个函数,函数与onclick事件一起工作。
  • 使用 loading 作为状态变量,并使用 useState 挂钩进行更改,以便触发重新渲染,如果您在类组件上,则使用 setState 进行更改
  • 像这样:const [loading, setLoading] = useState(true)。然后,当您想为其设置新值时,请执行 setLoading(false)
  • 如果你在一个功能组件上,上面的例子可以工作

标签: javascript reactjs components jsx


【解决方案1】:

我建议您阅读有关 React State 的内容,这段代码中的某些内容是错误的。但是让我们解决您的问题。

先将此变量添加到状态,然后用setState更改它,以触发重新渲染:

export class LoginPage extends React.Component{
    constructor(props) {
      super(props);
      this.state = {
        loading: false
      };
    }

    login(){
      this.setState({ loading: true })
      console.log(this.state.loading)
    }

    render(){
      let username = '',
          password = '',

      // your return will stay the same
    }
}

【讨论】:

  • 我收到此错误:未捕获的类型错误:无法读取未定义的属性(读取'setState')
  • 在渲染方法之外声明您的login 函数,我将编辑我的答案
  • 谢谢你,我昨天不知道状态,对不起。 :)
  • @yefee 不用担心,我建议您阅读大量相关内容,在我看来,了解 React 是最重要的事情。另外,如果您刚开始学习 React,我建议您学习功能组件,而不是类组件,这就是您在本示例中使用的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2011-09-02
  • 2021-02-28
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多