在学习React的同时,我发现了以下代码。
据我了解,React中的DOM通常是通过 Refs 访问的。
但是,这段代码使用了 document ,而且我还没有看到任何人使用这种方式。
我误会了吗?这是正式的方式吗?
另外, document.form 与 document.getElementByTagName(“ form”)一样吗?
任何参考资料都会有所帮助。
export default class IssueAdd extends React.Component {
constructor() {
super();
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(e) {
e.preventDefault();
const form = document.forms.issueAdd;
this.props.createIssue({
owner: form.owner.value,
title: form.title.value,
status: 'New',
created: new Date(),
});
form.owner.value = '';
form.title.value = '';
}
render() {
return (
<div>
<form name="issueAdd" onSubmit={this.handleSubmit}>
<input type="text" name="owner" placeholder="Owner" />
<input type="text" name="title" placeholder="Title" />
<button>Add</button>
</form>
</div>
);
}
}
答案 0 :(得分:1)
在React中不推荐通过document变量访问DOM。
如您所说,您应该为您的元素创建一个引用,然后通过它进行访问。 (有关参考文献的更多信息:https://reactjs.org/docs/refs-and-the-dom.html)
简短示例:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
getOffset = () => {
console.log(this.myRef.current.offsetTop); // will output the offset top of the div
}
render() {
return <div ref={this.myRef} onClick={this.getOffset}>Test div</div>;
}
}
这将在单击时控制台记录div的偏移量顶部。
信息:React.createRef()
是在React 16.3中添加的,在此之前您有回调引用-有关文档的更多信息...
答案 1 :(得分:0)
React只是另一个JavaScript库,因此它具有您可能在普通javascript中使用过的所有功能,例如访问 window 对象或 document 对象。 但这是否意味着您应该使用它们,绝对不要使用you will find the reasons here。直接DOM操作是非常昂贵的操作。
基本上,React致力于virtual DOM的概念。虚拟DOM使得React无法轻松,快速来更新实际DOM,而无需处理多个直接DOM操作的开销。
来到引用,因为我们不想使用 document 对象来访问HTML元素React提供的引用,这将有助于进入特定元素并快速访问它(它将返回数据)来自虚拟DOM)。
关于裁判的好文章:
并且偏离航线
顺便说一句:欢迎来到React的美好世界:)