如何摆脱:警告:<span>标签上的prop`settaskstatus`的值无效

时间:2019-10-16 17:19:48

标签: reactjs material-ui

我创建了自己的组件,如下:

import React, { Component, Fragment } from 'react';
import Checkbox from '@material-ui/core/Checkbox';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/core/styles';

function StyledCheckbox(props) {
    const classes = useStyles();
    let iconClassName;
    if (!props.status) {
        iconClassName = classes.undoneIcon;
    } else if (props.status == 1) {
        iconClassName = classes.inProgressIcon;
    } else if (props.status == 2) {
        iconClassName = classes.checkedIcon;
    } else if (props.status == 3) {
        iconClassName = "taskStatusCheckboxCANCELED";
    }
    return (
        <Checkbox
            className={classes.root + " checklistTaskStyledCheckbox"}
            checkedIcon={<span className={clsx(classes.icon, iconClassName)} />}
            color="default"
            icon={<span className={iconClassName} />}
            {...props}
            onChange={() => {
                props.settaskstatus(props.message)
            }}
        />
    );
}
export default StyledCheckbox;

因此,如上所示,我需要传递在onChange eventListener中调用的settaskstatus函数。 这过去反应起来很简单,这里是前面显示的组件标记

                     <StyledCheckbox
                        status={this.state.status2}
                        message={this.props.message}
                        settaskstatus={this.setTaskStatus}
                     />

但是现在我遇到了这个错误

  

backend.js:6警告:道具settaskstatus的值无效   标签。从元素中删除它,或者传递一个字符串或数字   保留在DOM中的值。有关详细信息,请参见   www.fb.me/react-attribute-behavior       跨度(由ForwardRef(ButtonBase)创建)       在ForwardRef(ButtonBase)中(由WithStyles(ForwardRef(ButtonBase)创建))

2 个答案:

答案 0 :(得分:0)

我认为问题可能在于您正在向<Checkbox />传递{... props},而props包含settaskstatus,这是一个自定义属性。

尝试将其删除,然后向下传递{... rest}。

https://reactjs.org/warnings/unknown-prop.html

答案 1 :(得分:0)

尝试将道具分解为rest对象和settaskstatus,如下所示:

import React, { Component, Fragment } from 'react';
import Checkbox from '@material-ui/core/Checkbox';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/core/styles';

function StyledCheckbox(props) {
    const classes = useStyles();
    let iconClassName;
    if (!props.status) {
        iconClassName = classes.undoneIcon;
    } else if (props.status == 1) {
        iconClassName = classes.inProgressIcon;
    } else if (props.status == 2) {
        iconClassName = classes.checkedIcon;
    } else if (props.status == 3) {
        iconClassName = "taskStatusCheckboxCANCELED";
    }
    // See here:
    const {settaskstatus, ...rest} = props;
    // End see here :) 
    return (
        <Checkbox
            className={classes.root + " checklistTaskStyledCheckbox"}
            checkedIcon={<span className={clsx(classes.icon, iconClassName)} />}
            color="default"
            icon={<span className={iconClassName} />}
            {...rest}
            onChange={() => {
                settaskstatus(props.message)
            }}
        />
    );
}
export default StyledCheckbox;