从Material UI的TextField获取选择开始,结束和选择值

Bluearth

我需要从Material-ui的TextField获取文本选择数据。文本选择数据必须包括选择开始,选择结束和选择的文本。

我设法使用createRefs达到以下内容

import React, { createRef } from "react";
import { TextField, Button, Box, Grid } from "@material-ui/core";

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      selStart: undefined,
      selEnd: undefined,
      selValue: undefined
    };
    this.onSaveSelectionClicked = this.onSaveSelectionClicked.bind(this);
    this.textFieldRef = createRef();
  }

  onSaveSelectionClicked(ev) {
    // Somehow obtain selection start, end, and value
    // then update state
    const { selectionStart, selectionEnd, value } = this.textFieldRef.current;
    this.setState({
      selStart: selectionStart,
      selEnd: selectionEnd,
      selValue: value.substring(selectionStart, selectionEnd)
    });
  }

  render() {
    return (
      <Box p="2em">
        <Grid container spacing={2}>
          <Grid item xs={12}>
            <TextField
              name="essay1"
              label="Essay 1"
              multiline
              rows={3}
              fullWidth
              inputRef={this.textFieldRef}
            />
          </Grid>
          <Grid item xs={12}>
            <TextField
              name="essay2"
              label="Essay 2"
              multiline
              rows={3}
              fullWidth
              inputRef={this.textFieldRef}
            />
          </Grid>
          <Grid item xs={12}>
            <Button variant="contained" onClick={this.onSaveSelectionClicked}>
              Save selection
            </Button>
          </Grid>
          <Grid item xs={12}>
            <pre>{JSON.stringify(this.state)}</pre>
          </Grid>
        </Grid>
      </Box>
    );
  }
}

这给了我以下

在此处输入图片说明

问题是,这似乎不适用于多个TextField。current裁判属性将始终引用“论文2”文本字段。

有没有更好的方法来解决此问题?

这是上述代码的codeandbox的链接

阿明·穆罕默迪

完全不需要引用,因此选择会动态更改。
更改构造函数,如下所示:

constructor(props) {
    super(props);
    this.state = {
      selStart: undefined,
      selEnd: undefined,
      selValue: undefined
    };
    this.onSelectionChange = this.onSelectionChange.bind(this);
  }

添加处理程序:

 onSelectionChange(e) {
    const { selectionStart, selectionEnd, value } = e.target;

    this.setState({
      selStart: selectionStart,
      selEnd: selectionEnd,
      selValue: value.substring(selectionStart, selectionEnd)
    });
  }

然后在您的文本字段中,只需将事件设置为onMouseUp(或onBlur,如果您想更新lostFocus):

onMouseUp={this.onSelectionChange}

这样做,您的源代码如下:

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      selStart: undefined,
      selEnd: undefined,
      selValue: undefined
    };
    this.onSelectionChange = this.onSelectionChange.bind(this);
  }

  onSelectionChange(e) {
    const { selectionStart, selectionEnd, value } = e.target;

    this.setState({
      selStart: selectionStart,
      selEnd: selectionEnd,
      selValue: value.substring(selectionStart, selectionEnd)
    });
  }

  render() {
    return (
      <Box p="2em">
        <Grid container spacing={2}>
          <Grid item xs={12}>
            <TextField
              name="essay1"
              label="Essay 1"
              multiline
              rows={3}
              fullWidth
              onMouseUp={this.onSelectionChange}
            />
          </Grid>
          <Grid item xs={12}>
            <TextField
              name="essay2"
              label="Essay 2"
              multiline
              rows={3}
              fullWidth
              onMouseUp={this.onSelectionChange}
            />
          </Grid>
        </Grid>
      </Box>
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何自动选择 React Material TextField 的值?

如何从Material UI获取TextField的输入值?

如何更改Material-UI选择值?

Material-UI-TextField-以编程方式选择文本

无法获取Material-UI的目标属性-选择React组件

显示使用React和Material-UI控件的选择控件的默认值

Angular Material从MatSelectChange事件获取先前选择的值

React Material UI更新TextField值

如何定制material-ui的选择?

如果选择Popper选项,则TextField上的Material UI Popper如何保持Popper打开

Material Ui-在“选择”模式下将必需的属性添加到TextField

如何更改 TextField 日期选择器的日历图标的颜色?在 Material-UI React 中

与 React Hook Forms 一起使用时获取 Material UI 日期选择器的默认值

选择选项时如何避免Material UI选择焦点?

material-ui选择框未显示选择

如何在不使用onChange事件的情况下从Material UI获取TextField的输入值?

如何从material-ui TextField,DropDownMenu组件获取数据?

React:如何从Material-UI TextField组件获取值

在material-ui Autocomplete TextField中以编程方式设置值

在React Material-UI DataGrid中的复选框选择上获取行项目

react hook form + material ui:日期选择器未获取初始日期

如何从日期选择器中获取日期并在表格中显示?Material-UI。ReactJS

删除Material UI的TextField中的向上和向下箭头

Material UI:如何垂直居中 TextField 和 ButtonGroup

如何基于Material UI的github标签选择器示例删除Material UI芯片元素

更改Material-UI中的原色会导致Material-UI日期选择器崩溃

从下拉列表中选择项目时,React Material UI Select 不会更改值

Material ui单选按钮选择reactjs中的上一个按钮值

如何在react的material-UI选择框中设置默认值?