在 React 中处理 null 道具的最佳实践?

Posted

技术标签:

【中文标题】在 React 中处理 null 道具的最佳实践?【英文标题】:Best practice to handle null props in React? 【发布时间】:2021-03-06 22:37:47 【问题描述】:

假设我有两个组件:

// Hello.js

import React from "react";

export default function Hello(props) 
  const  name = "mike"  = props;
  return <div>Hello name</div>;

// App.js

import React from "react";
import Hello from "./Hello";

export default function App() 
  return (
    <div>
      <Hello name=null />
    </div>
  );


// renders Hello

如果我将null props 传递给Hello 组件,Hello 组件将不会使用默认值,而是使用null 作为值并呈现它。

仅当我明确传递undefined 或不传递任何内容时才会使用默认值:

<Hello name=undefined />
<Hello />

// renders Hello mike

所以我的问题是我应该如何正确处理 null 道具?像这样将它传递给子组件时,我是否应该在父组件中处理它:

// App.js
<Hello name=getName() || 'mike' />

或者我应该像这样在子组件中处理它:

// Hello.js

return <div>Hello name || "mike"</div>;

是否有任何“最佳实践”来帮助处理这个问题?

【问题讨论】:

【参考方案1】:

不好,因为别人会忘记并大喊WTF

// App.js
<Hello name=getName() || 'mike' />

如此,但这很难看,分配默认值更优雅

// Hello.js
return <div>Hello name || "mike"</div>;

更好,为什么不直接返回字符串或未定义

function getName()
  ...
  return something || undefined

最好,人们不会总是这样做,如何确保? TypeScript 会在编译时检查它

interface Props 
    name: string;

interface State 
    xxx: xxx

class Hello extends React.Component<Props, State> 

随心所欲,性价比最高

【讨论】:

【参考方案2】:

你可以使用JS空合并操作符来实现如下方式:

props.name ?? 'Default value'

【讨论】:

以上是关于在 React 中处理 null 道具的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

从 React 上下文 API 的列表中删除记录后无法设置道具值

React.js最佳实践01

javascript 道具作为国家最佳实践

styled-component - 传递道具最佳实践

React Router 用户角色的最佳实践 (Firebase)

React-hook-form 输入字段匹配验证最佳实践