wordpress - 如何向 WordPress Gutenberg 编辑器添加设置
问题描述
我正在尝试编写一个简单的插件来改变编辑帖子屏幕(现在称为古腾堡)的行为。我@wordpress/scripts
用来捆绑javascript。以下代码将使控件出现...但是当我单击切换时,它会重新加载页面而不是更改状态。
我究竟做错了什么?我找不到任何关于如何在古腾堡编辑器的上下文中使用状态的文档。
import { registerPlugin } from '@wordpress/plugins';
import { PluginMoreMenuItem } from '@wordpress/edit-post';
import { pencil } from '@wordpress/icons';
import { ToggleControl } from '@wordpress/components';
import { withState } from '@wordpress/compose';
const HemingwayModeToggleControl = withState( {
hemingwayMode: false,
} )( ( { hemingwayMode, setState } ) => (
<ToggleControl
label="Hemingway mode"
help={ hemingwayMode ? 'Hemingway mode is on.' : 'Hemingway mode is off.' }
checked={ hemingwayMode }
onChange={ () => setState( ( state ) => ( { hemingwayMode: ! state.hemingwayMode } ) ) }
/>
) );
const HemingwayModeMoreMenuItem = () => (
<PluginMoreMenuItem
icon={pencil}
>
<HemingwayModeToggleControl />
</PluginMoreMenuItem>
);
registerPlugin( 'hemingway-mode-more-menu', { render: HemingwayModeMoreMenuItem } );
解决方案
这里的问题是这个插槽中的每个组件都用<button></button>
. 因此,当您点击切换按钮时,您宁愿点击此按钮。但在你的情况下,我认为这并不重要,你可以使用按钮 onClick 事件来设置你的状态。这是更新的代码,它正在工作。
import { registerPlugin } from '@wordpress/plugins';
import { PluginMoreMenuItem } from '@wordpress/edit-post';
import { pencil } from '@wordpress/icons';
import { ToggleControl } from '@wordpress/components';
import { withState } from '@wordpress/compose';
const HemingwayModeMoreMenuItem = withState( {hemingwayMode: false} )(
({ hemingwayMode, setState }) => (
<PluginMoreMenuItem
icon={pencil}
onClick={ (e) => {
e.preventDefault();
setState( ( state ) => ( { hemingwayMode: ! state.hemingwayMode } ) )
} }
>
<ToggleControl
label="Hemingway mode"
help={ hemingwayMode ? 'Hemingway mode is on.' : 'Hemingway mode is off.' }
checked={ hemingwayMode }
/>
</PluginMoreMenuItem>
)
);
registerPlugin( 'hemingway-mode-more-menu', { render: HemingwayModeMoreMenuItem } );
剩下的问题是,当单击按钮时,更多工具和选项部分会关闭。此行为是默认行为,我不知道如何覆盖它。
推荐阅读
- http - 是否可以从 http Handle 函数写入通道?
- javascript - 无法读取 React Storm 中未定义的属性 'charAt'
- javascript - Uncaught in promise
- angular - Angular 6/7 Ionic redirect to a URL but close any open modal windows
- c# - 如何阻止 ComboBox 在 Ctrl-Enter 上打开?
- arrays - netlogo:数组问题:来自列表(过滤器
- python-3.x - How would I change this tuple back into string to be written in a file?
- gradle - 错误:Gradle 5.0 中删除了对使用低于 3.0 的工具 API 版本的客户端的支持
- windows - Windows Server 2016 1607 上的 Windows 容器中的 Jenkins
- r - How to convert the output from readLines into a dataframe