小能豆

reactjs中render和class内部的函数

javascript

我正在尝试学习 reactjs,但我有一些不确定的地方。我参考了 react DOCS 和其他一些教程,我看到函数写在 render 函数中,也写在类中。我们应该在 react 的 render 函数中做什么?

第一种方式

class App extends Component {

    test(user) {

        return user.firstName;
    }

    render() {

        const user = {
            firstName: 'Harper',
            lastName: 'Perez'
        };

        return (

            <div>

                <h1>{this.test(user)}</h1>

            </div>
        )
    }
}

第二种方式

class App extends Component {

       render() {

        const user = {
            firstName: 'Harper',
            lastName: 'Perez'
        };

        function test(user) {

            return user.firstName;
        }

        return (

            <div>

                <h1>{test(user)}</h1>

            </div>

        )

    }
}

这两种方法都有效。但我想知道最好的方法是什么?最重要的是,我想知道在渲染函数中我可以做什么。

谢谢。


阅读 45

收藏
2024-06-25

共1个答案

小能豆

在 React 中,该render函数用于定义组件输出的结构(即要渲染的 JSX)。理想情况下,您应该render尽可能保持该方法简洁明了,主要关注渲染 UI 元素。

以下一些指南可帮助您了解函数内部应该做什么和不应该做什么render

render该方法的最佳实践

  1. render尽可能将逻辑放在外面:在方法外部定义函数和任何与 UI 无关的逻辑render。这样可以让render方法保持干净,并专注于返回 JSX。

```
class App extends Component {
test(user) {
return user.firstName;
}

   render() {
       const user = {
           firstName: 'Harper',
           lastName: 'Perez'
       };

       return (
           <div>
               <h1>{this.test(user)}</h1>
           </div>
       );
   }

}
```

  1. 用于renderJSX 和 UI 逻辑:执行与渲染 UI 直接相关的简单逻辑,例如条件渲染、映射数组以生成元素或在 JSX 中使用的简单计算。

```
class App extends Component {
render() {
const user = {
firstName: ‘Harper’,
lastName: ‘Perez’
};

       return (
           <div>
               <h1>{user.firstName}</h1>
           </div>
       );
   }

}
```

  1. 避免在内部定义函数render:在render方法内部定义函数不是一个好的做法,因为它可能导致每次渲染时不必要地重新创建该函数,从而影响性能。

```
class App extends Component {
test(user) {
return user.firstName;
}

   render() {
       const user = {
           firstName: 'Harper',
           lastName: 'Perez'
       };

       return (
           <div>
               <h1>{this.test(user)}</h1>
           </div>
       );
   }

}
```

概括

  • 在外面做render
  • 与生成 UI 不直接相关的复杂逻辑和功能应该在render方法之外定义。
  • 可重复使用逻辑和实用功能的类方法。
  • 在里面做render
  • 简单、内联逻辑直接影响 JSX。
  • 条件渲染、列表的数组映射、JSX 中使用的简单计算。

例子

以下是结合这些最佳实践的示例:

import React, { Component } from 'react';

class App extends Component {
    // Define functions outside render
    test(user) {
        return user.firstName;
    }

    render() {
        const user = {
            firstName: 'Harper',
            lastName: 'Perez'
        };

        // Conditional rendering and simple calculations inside render
        const isUserPresent = !!user;
        const greeting = isUserPresent ? this.test(user) : 'Guest';

        return (
            <div>
                <h1>{greeting}</h1>
                {isUserPresent && <p>Welcome back, {user.firstName} {user.lastName}!</p>}
            </div>
        );
    }
}

export default App;

这种方法确保render方法保持干净并专注于描述 UI,从而增强了组件的可读性和可维护性。

2024-06-25