我很难从Material UI TextField组件中删除自动填充上的黄色背景。

在旧版本中,我是这样进行的:

const inputStyle = { WebkitBoxShadow: '0 0 0 1000px white inset' };
<TextField
    ...
    inputStyle={inputStyle}
/>


但是在最新版本中,删除了inputStyle道具并添加了InputProps

我试图用这种方法将其删除,但是黄色背景颜色仍然出现:
reactjs -  Material UI删除TextField自动填充上的黄色背景-LMLPHP

import React from "react";
import PropTypes from "prop-types";
import { withStyles } from "@material-ui/core/styles";
import TextField from "@material-ui/core/TextField";

const styles = {
  root: {
    ':-webkit-autofill': {
        WebkitBoxShadow: '0 0 0 1000px white inset',
        backgroundColor: 'red !important'
    }
  },
  input: {
    ':-webkit-autofill': {
        WebkitBoxShadow: '0 0 0 1000px white inset',
        backgroundColor: 'red !important'
    }
  }
};

const renderTextField = (props) => {
    const {
        classes,
        label,
        input,
        meta: { touched, error },
        ...custom
    } = props;

  return (
    <TextField
        label={label}
        placeholder={label}
        error={touched && error}
        helperText={touched && error}
        className={classes.root}
        InputProps={{
            className: classes.input
        }}
        {...input}
        {...custom}
    />
  );
}

renderTextField.propTypes = {
  classes: PropTypes.object.isRequired
};

export default withStyles(styles)(renderTextField);

最佳答案

inputStyle的替换为inputProps

const inputStyle = { WebkitBoxShadow: "0 0 0 1000px white inset" };
<TextField name="last_name" inputProps={{ style: inputStyle }} />


InputPropsinputProps是常见的混淆点。大写字母“ I” InputPropsTextField中的Input元素提供道具(Input将本机input包装在div中)。小写的“ i” inputProps为在input组件中呈现的本机Input元素提供了支持。如果要向本机input元素提供内联样式,则上面的代码示例将解决问题。

还有其他几种使用方法通过withStyles使用类。

如果要使用className属性,则必须再次在input上(而不是将其包裹的div上)才能获得所需的效果。因此,以下内容也将起作用:

const styles = {
  input: {
    WebkitBoxShadow: "0 0 0 1000px white inset"
  }
};
const MyTextField = ({classes}) => {
   return <TextField name="email" inputProps={{ className: classes.input }} />;
}
export default withStyles(styles)(MyTextField);


如果要利用“:-webkit-autofill”伪类,只需调整JSS语法并添加"&" to reference the selector of the parent rule

const styles = {
  input: {
    "&:-webkit-autofill": {
      WebkitBoxShadow: "0 0 0 1000px white inset"
    }
  }
};
const MyTextField = ({classes}) => {
   return <TextField name="email" inputProps={{ className: classes.input }} />;
}
export default withStyles(styles)(MyTextField);


您还可以利用以下两种方法之一,但通过InputProps属性使用大写的“ I” classes

const styles = {
  input: {
    WebkitBoxShadow: "0 0 0 1000px white inset"
  }
};
const MyTextField = ({classes}) => {
   return <TextField name="email" InputProps={{ classes: { input: classes.input } }} />;
}
export default withStyles(styles)(MyTextField);


这是使用所有这些方法的有效示例:

reactjs -  Material UI删除TextField自动填充上的黄色背景-LMLPHP

10-07 19:11