当前位置: 首页 > 面试题库 >

反应道具-如果另一个道具为空/空,则在道具上设置isRequired

张照
2023-03-14
问题内容

我有一个组件<Button>
如果组件没有this.props.children,我想将prop设置ariaLabelisRequired,否则in可以是可选的。我怎么做?

ariaLabel 不需要道具:

<Button>Add to bag</Button>

ariaLabel 需要道具:

<Button ariaLabel="Add to bag" icon={ favorite } />

如果this.props.childrenthis.props.ariaLabel为空,则抛出错误,说this.props.ariaLabelisRequired

<Button icon={ favorite } />

propTypes:

Button.propTypes = {
    /** icon inside Button. */
    icon: React.PropTypes.object,
    /** Content inside button */
    children: React.PropTypes.node,
    /** Aria-label to screen readers */
    ariaLabel: React.PropTypes.string, /*isRequired if children is empty */
};

谢谢


问题答案:

您不需要其他库,“ prop-
types”提供了现成的功能。参见https://facebook.github.io/react/docs/typechecking-with-
proptypes.html

例:

import PropTypes from 'prop-types';

//.......

ExampleComponent.propTypes = {
    showDelete: PropTypes.bool,
    handleDelete: function(props, propName, componentName) {
        if ((props['showDelete'] == true && (props[propName] == undefined || typeof(props[propName]) != 'function'))) {
            return new Error('Please provide a handleDelete function!');
        }
    },

}


 类似资料:
  • 如果属性不是,则任务是使用值覆盖任何属性值。如果您关心,这背后的业务逻辑是一个APIendpoint,它修改,并将作为参数(但可以更改所有或任何属性,因此我们不希望用null覆盖有效的旧值)。解决这个问题的方法是这样的。 我被告知这是多余的(我同意)。解决方案伪代码如下所示: 当然,这不是JavaScript,所以没那么容易。我的反射解决方案在下面,但imo,有冗余比在这里做反射更好。我有什么其他

  • 在本页React Native State on React Native docs中,我们有以下语句: 道具由父级设置,并且在组件的整个生存期内都是固定的。 但是,在本页React文档上的React State and Lifecycle中,我们有以下声明: 因为this.props和this.state可能是异步更新的,所以不应该依赖它们的值来计算下一个状态。 我的误解在哪里?对我来说,当组件

  • 我有一个组件,根据其大小接收道具。道具可以是字符串或数字,例如:或。 我能让知道这可以是PropTypes验证中的一个或另一个吗? 如果未指定类型,则会收到警告: prop type无效;它必须是一个函数,通常来自React。道具类型。

  • 问题内容: React建议转移道具。整齐! 我如何转移除一个以外的所有东西? 问题答案: 您可以使用以下技术来消耗一些道具并传递其余的道具: 资源

  • 悬而未决...

  • 我试图通过反应路由器将道具从一个组件传递到另一个组件。当我试图从子组件获取道具时,我得到了这样一条消息。这是我的代码: Tracks.jsx: app.jsx: Album.jsx: