当前位置: 首页 > 知识库问答 >
问题:

无状态react函数显示无效的proptype,即使它是

宰父衡
2023-03-14

我有一个无状态的react组件,看起来像这样:

import React from 'react';
import PropTypes from 'prop-types';
import Goal from './Goal'
import {List} from 'material-ui/List';
import {PropTypes as MobxPropTypes} from 'mobx-react';

const propTypes = {
    goals: MobxPropTypes.ObservableArray,
    onClick: PropTypes.function
};

const GoalsList = ({goals, onClick}) =>(
        <List>
            {goals.map((goal) => (
                <Goal
                    key={goal.name}
                    name={goal.name}
                    onClick={() => {
                        onClick(goal)
                    }}
                />
            ))}
        </List>);


GoalsList.propTypes = propTypes;
export default GoalsList;

我使用此组件的方式如下:

<GoalList goals={this.props.store.goals}
          onClick={this.props.store.selectGoal}/>

这就是商店中如何定义目标选择目标

选择目标:

@action selectGoal = (goal) => {
    this.selectedGoal = goal;
}

目标:

@observable goals = [];

我仍然在控制台中得到以下警告:

失败的prop类型: GoalList: prop类型目标无效;它必须是一个函数,通常来自prop-type包,但收到的未定义的

和:

失败的道具类型:GoalList:道具类型onClick无效;它必须是一个函数,通常来自prop-types包,但收到的undefined

当我调试呈现GoalList的渲染函数时,我看到目标观察数组onClark是一个函数。我不明白为什么我一直收到这些警告。

共有1个答案

郝承悦
2023-03-14

这里的问题是如何定义道具类型。你的代码本身很好,我猜一切都按预期进行。

函数的属性类型是PropTypes。func,而不是PropTypes。函数,因此应修复您在单击时看到的有关的警告。

可观察数组的mobx prop类型是观察数组(小写o)。

因此,最后您的propTypes应该如下所示:

const propTypes = {
    goals: MobxPropTypes.observableArray,
    onClick: PropTypes.func,
};

警告信息有点混乱,但一旦你知道发生了什么,它就有意义了:

道具类型onClick无效;它必须是一个函数

如果提供的类型与所需类型匹配,则React PROPTYPE应该是返回true的函数。

但是没有定义

但是,由于您使用了函数而不是函数,因此PropTypes最终被未定义而不是函数,因此PropTypes验证器无法正常工作。

 类似资料:
  • 在React中,我编写了一个无状态功能组件,现在想向其添加Prop类型验证。 组件: 组件,渲染: 正如你在中看到的,我正在传递至。因为是一个字符串,我希望道具类型验证能够生效。相反,我在浏览器控制台中得到一个错误,因为字符串没有名为的方法。 为什么道具类型验证没有按预期工作?看看这个问题,情况似乎是一样的。

  • 在不使用类的情况下,如何在react的功能性无状态组件中使用PropTypes?

  • 当用户单击“登录”时,会重定向到KeyClope登录页面 [Server:node-00]13:40:00709警告[org.keydape.adapters.OAuthRequestAuthenticator](默认任务-30)状态参数无效 我的申请是: 应用程序URL为https://localhost:8443/app 当我使用超文本传输协议时,它可以工作。但是当我使用https时,错误就来

  • 我试图在TypeScript中编写一个React无状态函数组件。请参见以下代码: 然而,编译器在const Link上给了我一个错误: src/components/Link。tsx(17,7):错误TS2322:Type“({view,className,params,queryParams,store,refresh,style,children,title,router}:LinkPr…”不

  • 我跟随一些在线示例实现了一个导航抽屉操作栏半透明状态栏。半透明的状态栏根本不会变为透明。 这是我的AndroidManifest。xml v21/风格。xml 主要活动。xml 以及主要的活动。JAVA

  • 问题内容: 我遇到一个问题,在此应用程序上尝试POST请求时收到以下错误代码(请记住我是初学者node.js / js程序员): 错误: app.js: 以下是我的edit.js路由,我认为是发生问题的地方: 问题答案: 我刚才有一个类似的错误消息,并设法通过更改解决了该问题: 至: 要不就: 也就是说,请确保您未尝试在某处设置无效的HTTP状态代码。 这可能是问题所在,但看起来您不小心复制了代码