javascript - 在 React 组件中存储多个引用 vs 通过 ID 查询 DOM

标签 javascript reactjs performance

我正在 React 中构建一个表单,并希望在提交后自动聚焦于第一个无效字段。为此,我需要访问无效字段的引用并对其调用 .focus()。那么我的问题是,在构造函数中存储多个引用更好(性能更高)还是只将 ID 附加到每个字段并查询 DOM 以获取引用。

constructor(props) {
    super(props);
    this.state = this.props.entry;
    this.submitForm = this.submitForm.bind(this);
    this.field1 = React.createRef();
    this.field2 = React.createRef();
    this.field3 = React.createRef();
    this.field4 = React.createRef();
}
...

this.field3.focus();

对比

document.getElementById(`form_${fieldId}`).focus();

本质上,是否没有必要存储对每个表单输入的引用,而不是通过 ID 查询一次 DOM?

最佳答案

如果你包装<input>在一个组件中,你可以建立一个单一的 ref 并委托(delegate)功能:

class TextInput extends React.PureComponent {
  constructor() {
    super()
    this.input = React.createRef();
  }

  focus = () => {
    this.input.current.focus()
  }

  render() {
    return(<input ref={this.input} />)
  }
}

// elsewhere...
const text_input = React.createElement(TextInput)
text_input.focus() #=> calls the `focus` method defined above

关于javascript - 在 React 组件中存储多个引用 vs 通过 ID 查询 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52653486/

相关文章:

performance - 今天解释型语言应该有多快?

javascript - 获取数组中的所有元素(Javascript)

javascript - 如何在 d3.js 中设置 y 轴的最小步长?

javascript - 为什么 redux-form 不在提交函数中将选项字段的值作为 prop 传递?

javascript - 如何取回被过滤的数据(ReactContextAPI)

performance - CPU速度是否受从内存中获取指令的速度限制?

python - 填充 DataFrame Pandas Python

javascript - 使用 javascript 从 php 获取 id

javascript - 替换 JavaScript 中的双反斜杠——文本区域中的换行符

javascript - 如何使用单独的单选按钮表单元素正确映射 React 元素?