将 ErrorText 添加到 material-ui 文本字段会移动其他元素

Adding ErrorText to material-ui Textfield moves other elements

我在 React 应用程序中有一个注册表单。我正在使用 material-ui TextField 并在输入错误时使用 errorText 属性 添加消息。

errorText={this.state.messages.emailMessage}

state.messages.emailMessage 最初设置为 null,因此 TextField 在首次呈现输入时没有额外的 space 用于消息。

添加消息 后,它会移动其他元素。

如果需要新节点,我如何才能允许 space 以便不移动其他元素?我尝试将消息的初始状态设置为“ ”,但这会将输入颜色显示为红色以表示错误并且无论如何都不起作用!

您可以只使用 errorStyle 属性 设置绝对位置.. 这就是我在项目中解决这些问题的方法。

最后,我将一个样式参数传递给 material-ul 组件,将错误文本设置为显示:table。这样就可以阻止它在添加时影响其他元素。

仅仅将位置设置为绝对位置根本不起作用。这使错误文本能够显示在输入字段上。因此,为了完美修复,我们还必须设置 bottom 一些值以使其修复。下面的例子。

errorStyle:{
      position: 'absolute',
      bottom: '-0.9rem'
    }

如其他答案设置中所述,显示 table 也有效。

所以这两种样式都有效

To where should this style added?

HelperText样式需要添加。这是一个例子:

const helperStyles = makeStyles(theme => ({
  root: {
      position: 'absolute',
      bottom: '1em',
  },
}))

const helperClasses = helperStyles()

<FormHelperText classes={helperClasses}>
    {helperText}
</FormHelperText>

对于那些需要更新答案的人(据我所知,errorText 已不再是问题),希望这会奏效:

<Box style={{ minHeight: "100px" }} >
  <TextField
    {...props}
  />
</Box>

它允许在不影响其他组件的情况下在 flexbox 内呈现错误文本消息,因此它不应该干扰它周围的东西。 CodeSandbox

当没有要显示的消息时,您可以通过使 helperText 等于空 space 来使它们具有固定高度。

<TextField helperText={error ? error.message : ' '} />

就像@leonormes 的 post 建议的那样,将 errorStyle 属性添加到 material ui 组件并设置 display 属性 到 "table" 解决了这个问题。

显示错误时,material UI 组件不再移动或未对齐。

组件最终的样子如下:

<TextField
    floatingLabelText="Name"
    value={this.state.name}
    onChange={e => this.setState({ name: e.target.value })}
    errorText={this.props.validationErrors.get('name')}
    errorStyle={{ display: "table" }}
/>

您可以定位 MuiFormHelperText-root class 。下面的示例是当您在 MUI makeStyles 中应用样式时,但您可以对外部 CSS 文件执行相同的操作。

'& .MuiFormHelperText-root' : {
     position : 'absolute',
     bottom : '-1rem'
 }

你可以这样做

  
  
  const useStyles = makeStyles({
        helperText: {
            '& .MuiFormHelperText-root': {
                height: '0',
                marginTop: '0'
            }
        }
    });
    
    
  And then add this class text field control 

  className={classes.helperText}