TypeError 这是使用 primereact 的未定义原因
TypeError this is undefined whyle using primereact
我正在尝试在我的项目中使用 PrimeReact 的编辑器组件
import React from 'react';
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
function Admin() {
return(
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={this.state.text.bind(this)} onTextChange={(e) => this.setState({text: e.htmlValue}).bind(this)} />
</header>
</div>
);
}
但是当我 运行 这段代码时,我得到以下错误
TypeError: this is undefined
问题出在对文档的误解
这是我解决这个问题的方法。
import React, {Component} from 'react';
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
export class Admin extends Component{
constructor() {
super();
this.state = {
text1 : '<div>Hello World!</div><div>PrimeReact <b>Editor</b> Rocks</div><div><br></div>',
text2 : ''
};
}
render(){
return (
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={this.state.text1} onTextChange={(e) => this.setState({text: e.htmlValue})} />
</header>
</div>
);
}
}
您使用的是功能组件而不是 class 组件
请阅读 Function component vs class component
Function component vs class component 2
捷径解决方案使用 useState
import React, {useState} from 'react'; //import useState
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
function Admin() {
const [text,setText] = useState('')
return(
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={text} onTextChange={(e) => setText({text: e.htmlValue}).bind(this)} />
</header>
</div>
);
}
我正在尝试在我的项目中使用 PrimeReact 的编辑器组件
import React from 'react';
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
function Admin() {
return(
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={this.state.text.bind(this)} onTextChange={(e) => this.setState({text: e.htmlValue}).bind(this)} />
</header>
</div>
);
}
但是当我 运行 这段代码时,我得到以下错误
TypeError: this is undefined
问题出在对文档的误解
这是我解决这个问题的方法。
import React, {Component} from 'react';
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
export class Admin extends Component{
constructor() {
super();
this.state = {
text1 : '<div>Hello World!</div><div>PrimeReact <b>Editor</b> Rocks</div><div><br></div>',
text2 : ''
};
}
render(){
return (
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={this.state.text1} onTextChange={(e) => this.setState({text: e.htmlValue})} />
</header>
</div>
);
}
}
您使用的是功能组件而不是 class 组件 请阅读 Function component vs class component
Function component vs class component 2
捷径解决方案使用 useState
import React, {useState} from 'react'; //import useState
import Editor from './editor/Editor';
const header = (
<span className="ql-formats">
<button className="ql-bold" aria-label="Bold"></button>
<button className="ql-italic" aria-label="Italic"></button>
<button className="ql-underline" aria-label="Underline"></button>
</span>
);
function Admin() {
const [text,setText] = useState('')
return(
<div className="Admin">
<header className="App-header">
<Editor style={{height:'320px'}} value={text} onTextChange={(e) => setText({text: e.htmlValue}).bind(this)} />
</header>
</div>
);
}