如何在功能组件中设置displayName [React]

a53*_*416 15 javascript functional-programming reactjs

我知道displayName有时候需要设置它,特别是当你处理生产版本时.我想知道如何使用我的功能组件设置它 - 它是否可能/允许?

这是我在我的课程组件中得到的:

var MyComponent = React.createClass({
    displayName: 'HeyHey',

    render: function() {
        console.log(this.displayName);
    }
});
Run Code Online (Sandbox Code Playgroud)

如何在无状态组件中执行相同的操作?

Tha*_*you 24

文档displayName

displayName字符串用于调试消息.通常,您不需要显式设置它,因为它是从定义组件的函数或类的名称推断出来的.如果要为调试目的显示不同的名称或创建更高阶的组件,可能需要显式设置它,有关详细信息,请参阅包装显示名称以进行简单调试.

在您的情况下,您只需使用

const MyComponent = (props) => { ... }

MyComponent.displayName = 'HeyHey'
Run Code Online (Sandbox Code Playgroud)

如果您要在组件上设置默认属性,请defaultProps改用

const MyComponent = props => {
  return (
    <p>How you doin, {props.name}?</p>
  )
}

MyComponent.defaultProps = {
  name: 'Alice'
}

ReactDOM.render (<MyComponent/>, document.body)
// <p>How you doin, Alice?</p>
Run Code Online (Sandbox Code Playgroud)

  • 关于`defaultProps`的整个部分是无关紧要的,应该从这个答案中删除. (18认同)
  • @user633183 当其他人帮助删除它时,您是否有理由不断重新添加有关 `defaultProps` 的不相关信息?看起来您建议您可以设置 `defaultProps.name`,它的工作方式与 `displayName` 相同,这显然是错误的。 (5认同)
  • @谢谢,这是无关紧要的,因为1)没有回答OP的问题,2)类/函数参数与defaultProps无关。 (4认同)
  • @Petr Bela 请不要污损其他人的答案 (2认同)
  • @naomik对不起,如果您被冒犯了,但这不是对OP问题的正确答案,而且,通过将实例属性与静态displayName混合可能会误导您。打开https://output.jsbin.com/xamefaqege,在React开发工具中,您会看到组件的名称仍然是MyComponent。另一方面,通过以下答案,请参阅https://output.jsbin.com/zucarej,将displayName设置为HeyHey。 (2认同)

a53*_*416 23

弄清楚了

const MyComponent = props => {
  return (
    <p>How you doin?</p>
  )
}

MyComponent.displayName = "MyComponent"
Run Code Online (Sandbox Code Playgroud)

  • 只是好奇为什么我们应该使用defaultProps方式而不是.displayName? (4认同)
  • 两者都是正确的。不确定 defaultProps 与任何事情有什么关系。 (2认同)

Raz*_*zor 7

React 要么displayName在定义为箭头函数时需要功能组件,要么需要函数本身的名称。
所以对于箭头函数:

const SomeComponent = () => <p>I come from an arrow function</p>

SomeComponent.displayName = 'HeyHey'
Run Code Online (Sandbox Code Playgroud)

如果你使用一个函数,它会使用它的名字,displayName而不必单独定义它:

function HeyHey() { return <p>I come from a non-arrow function!</p> }
Run Code Online (Sandbox Code Playgroud)