反应事件处理程序未在 Docusaurus 页面上执行
React event handler not executing on Docusaurus page
概览
在我的自定义 Docusaurus 页面中,一个简单的按钮事件处理程序不会在单击时执行。该文件采用 React 组件的形式,这是 Docusaurus 页面的规范。
我做了什么
1) 我使用 docusaurus-init 设置我的 Docusaurus 应用程序,正如 Docusaurus 的 GitHub 页面上所宣传的那样(参见 https://www.npmjs.com/package/docusaurus-init)
2) 我按照这里 https://docusaurus.io/docs/en/custom-pages 的描述添加了一个自定义页面。即,我在 pages/
文件夹中添加了一个 JS 文件。
自定义页面代码
这是页面的全部代码。 React 组件中的代码是从 docs 中的 React 示例复制而来的。我在处理程序中添加了 console.log
语句。
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
class SignUp extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
console.log("Change occurred!");
this.setState({value: event.target.value});
}
handleSubmit(event) {
console.log("Submit occurred!");
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
module.exports = SignUp;
我期望的输出
应该弹出一个警告,输出应该出现在控制台中。由于 event.preventDefault()
,页面不应刷新。
会发生什么
输入字段和按钮显示得很好。我在输入字段中键入一些文本并点击提交。输入字段变为空白,没有警报,控制台中没有输出(无论是在客户端还是在服务器上)。似乎发生了刷新,event.preventDefault()
显然没有阻止。
我又看了一遍。也许试试这个!
<form onSubmit={this.handleSubmit.bind(this)}>
您忘记绑定到 react 组件。
这可能导致错误,它没有出现 event.preventDefault() 语句
嗨,这里是 Docusaurus 维护者。
这不是错误。在 v1 中,使用 React 作为渲染引擎,构建步骤的输出只是 HTML。没有向客户端发送 React 运行时,因此事件处理程序将无法工作。
您需要在 React 组件中编写脚本标签才能使其正常工作。这是一个 example.
如果您需要构建丰富的网站,您应该尝试 Docusaurus 2。您的代码将在那里按预期工作。
概览
在我的自定义 Docusaurus 页面中,一个简单的按钮事件处理程序不会在单击时执行。该文件采用 React 组件的形式,这是 Docusaurus 页面的规范。
我做了什么
1) 我使用 docusaurus-init 设置我的 Docusaurus 应用程序,正如 Docusaurus 的 GitHub 页面上所宣传的那样(参见 https://www.npmjs.com/package/docusaurus-init)
2) 我按照这里 https://docusaurus.io/docs/en/custom-pages 的描述添加了一个自定义页面。即,我在 pages/
文件夹中添加了一个 JS 文件。
自定义页面代码
这是页面的全部代码。 React 组件中的代码是从 docs 中的 React 示例复制而来的。我在处理程序中添加了 console.log
语句。
const React = require('react');
const CompLibrary = require('../../core/CompLibrary.js');
class SignUp extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
console.log("Change occurred!");
this.setState({value: event.target.value});
}
handleSubmit(event) {
console.log("Submit occurred!");
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
module.exports = SignUp;
我期望的输出
应该弹出一个警告,输出应该出现在控制台中。由于 event.preventDefault()
,页面不应刷新。
会发生什么
输入字段和按钮显示得很好。我在输入字段中键入一些文本并点击提交。输入字段变为空白,没有警报,控制台中没有输出(无论是在客户端还是在服务器上)。似乎发生了刷新,event.preventDefault()
显然没有阻止。
我又看了一遍。也许试试这个!
<form onSubmit={this.handleSubmit.bind(this)}>
您忘记绑定到 react 组件。 这可能导致错误,它没有出现 event.preventDefault() 语句
嗨,这里是 Docusaurus 维护者。
这不是错误。在 v1 中,使用 React 作为渲染引擎,构建步骤的输出只是 HTML。没有向客户端发送 React 运行时,因此事件处理程序将无法工作。
您需要在 React 组件中编写脚本标签才能使其正常工作。这是一个 example.
如果您需要构建丰富的网站,您应该尝试 Docusaurus 2。您的代码将在那里按预期工作。