javascript - ReactJS:使用枚举进行条件渲染

标签 javascript reactjs enums jsx conditional-rendering

我对 React 有点陌生,一直在练习使用 this article 中指定的枚举渲染方法创建应用程序.

但是,我尝试以与文章中提到的略有不同的方式应用它,更具体地说,使用它来有条件地呈现我网站的所有内容,<Nav /> 除外。基于 lastLinkClicked状态。对于 WEB_PAGES 对象中列出的每种情况,我都有不同的页面类。

也许我误解了这种方法,因为我对枚举没有太多经验,但我的页面没有正确呈现。这是我的代码:

class App extends Component {
  constructor(props){
    super(props);

    this.state = {
      x: ...
      y: ...
      z: ...
      lastClickedLink: 'home' //changes to 'new', 'settings', etc. using another function not listed here
    }
  }


  render() {
    function onLinkClick(link) {
      const WEB_PAGES = {
        home: <Home
                x={this.state.x}
              />,
        new: <NewPost />,
        settings: <Settings />,
        signup: <SignUp />,
        login: <Login />
      };
      return (
        <div>
          {WEB_PAGES.link}
        </div>
      );
    }

    return (
      <div>
        <Nav
          y={this.state.y}
          z={this.state.z}
        />
      {onLinkClick(this.state.lastClickedLink)}
    </div>
    );
  }
}

export default App;

为了简洁起见,我删除了一些代码。我在这个设置中遇到的错误是 TypeError: Cannot read property 'state' of undefined对于主页下的 WEB_PAGES 对象。

我最初认为 this指向 WEB_PAGES 对象,但更改了 thisApp表明state也未定义。我不太确定此时该做什么。

枚举条件渲染方法在这种规模上是否可行?如果不是,还有什么其他方法最适合这种情况?非常感谢!

最佳答案

在 javascript 中,当您使用 function 关键字创建函数时,它会创建自己的新作用域并创建默认对象 this。因此,当您尝试访问 this.state.x 时,它不会在函数内声明属性。它变成了 this.undefined.x。所以它给出了错误。

而箭头函数 {(() => {})} 不创建此对象,而是创建内部范围。

尝试在您的代码中使用以下渲染方法:

render() {
    return (
    <div>
        <Nav
        y={this.state.y}
        z={this.state.z}
        />
        {((link) => {
            const WEB_PAGES = {
            home: <Home
                    x={this.state.x}
                />,
            new: <NewPost />,
            settings: <Settings />,
            signup: <SignUp />,
            login: <Login />
            };
            return (
                <div>
                {WEB_PAGES[link]}
                </div>
            );
        })(this.state.lastClickedLink)}
    </div>
    );
}

关于javascript - ReactJS:使用枚举进行条件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50245505/

相关文章:

javascript - 当某些页面有其他菜单时如何制作 react 单页面应用程序

.net - 存储在数据库中的过时枚举成员

c++ - 您可以使用 Qt foreach 循环遍历每个可能的枚举值吗?

php - Google Maps API javascript 中的 WordPress query_posts(多个标记)

javascript - 将数据解析为整数 JSON 数组时出现问题

reactjs - 登录成功后重定向到上一个路由

php - 如何在 PHP 中以整数形式返回枚举列值

javascript - 浏览器何时停止在 javascript 中执行递归函数?

javascript - 使用特定的 ajax 调用设置集合获取

javascript - 获取 Object.freeze 只能在 Android 上的对象上调用