javascript - 为什么我的按钮没有在 React 中渲染?

标签 javascript reactjs if-statement conditional-rendering

所以我是 react 新手,我想添加渲染逻辑,以便“更新类(class)”和“删除类(class)”按钮仅在以下情况下显示:

  • 有一个经过身份验证的用户。

  • 并且 user._idUserId 匹配 这是我到目前为止所拥有的:

类(class)详情

    class CourseDetail extends Component {
              constructor(props) {
                super(props);
                this.state = {
                  course: [],
                  user: [] //user state contains user data
                };

                this.handleButtonLogic = this.handleButtonLogic.bind(this);
              }

                componentDidMount() {
                  this.handleButtonLogic() {
                }


              handleButtonLogic() {
                const user = this.state; 
                const isLoggedIn = localStorage.getItem('IsLoggedIn');
                const UserId = localStorage.getItem('UserId');
                const button = document.getElementsByName('button')
            if (!isLoggedIn && user._id !== UserId) {
             button.style.display = 'none'
            }  else {
              button.style.display = ''
            }
              }

            render() {
        const { course, user } = this.state;

        return (//JSX inside
          <div>
            <div className="actions--bar">
              <div className="bounds">
                <div className="grid-100">
                  <span>
                    <NavLink to={`/courses/${course._id}/update`} className="button">Update Course</NavLink> 
                    <NavLink to={"#"} className="button" onClick={this.handleDelete} > Delete Course</NavLink>
                  </span>
    }

export default CourseDetail;

这是我得到的错误:

React Error

有人可以帮忙吗?

最佳答案

我刚刚将您的逻辑移入渲染本身,并使用三元运算符进行条件渲染。如果用户已通过身份验证并且用户 ID 与当前用户 ID 匹配,则会显示按钮。

仔细看看三元:

{(!isLoggedIn && user._id !== UserId) ? (<span>
   <NavLink to={`/courses/${course._id}/update`} className="button">Update Course</NavLink>
   <NavLink to={"#"} className="button" onClick={this.handleDelete}>
                  Delete Course</NavLink>
</span>) : null}

编辑后的代码: 如果我们执行以下操作,则不需要 handleButtonLogic() ,我也将其删除了。

class CourseDetail extends Component {
  constructor(props) {
    super(props);
    this.state = {
      course: [],
      user: [] //user state contains user data
    };
  }

  render() {
    const {course, user} = this.state;
    const isLoggedIn = localStorage.getItem('IsLoggedIn');
    const UserId = localStorage.getItem('UserId');
    return (
      <div className="actions--bar">
        <div className="bounds">
          <div className="grid-100">
            {(!isLoggedIn && user._id !== UserId) ? (
              <span>
                <NavLink to={`/courses/${course._id}/update`} className="button">Update Course</NavLink>
                <NavLink to={"#"} className="button" onClick={this.handleDelete}>
                  Delete Course</NavLink>
              </span>
            ) : null}
        </div>
      </div>
    </div>
  )
}

export default CourseDetail;

关于javascript - 为什么我的按钮没有在 React 中渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231340/

相关文章:

reactjs - docker-compose 命令 'npm start' 不会自动启动 React 应用程序?

c# - 是否只有在条件为真时才从函数返回的单行语句?

javascript - 检查数据输入时的自定义警报,Javascript

javascript - 如何避免使用 2 个条件对 JavaScript 数组进行两次排序

javascript - IE 和 Firefox 之间空 XML 响应的不同行为

javascript - useEffect 钩子(Hook)在方向改变时不触发

javascript - import * 在 Javascript 中做什么?

java - 如何修复 'Syntax error on token "else“,删除此 token ”?

javascript - 在 indexedDb 中添加多个对象的正确方法?

javascript - Browserify - 在符号链接(symbolic link)模块上的 package.json 中进行转换在 npm3 中不起作用