Disabled 是一个 WordPress 组件,用于禁用后代可聚焦元素并阻止指针交互。它通过包装子组件实现禁用效果,并支持通过上下文检测禁用状态。
import { useState } from 'react';
import { Button, Disabled, TextControl } from '@wordpress/components';
const MyDisabled = () => {
const [ isDisabled, setIsDisabled ] = useState( true );
let input = (
<TextControl
__next40pxDefaultSize
label="Input"
onChange={ () => {} }
/>
);
if ( isDisabled ) {
input = <Disabled>{ input }</Disabled>;
}
const toggleDisabled = () => {
setIsDisabled( ( state ) => ! state );
};
return (
<div>
{ input }
<Button variant="primary" onClick={ toggleDisabled }>
Toggle Disabled
</Button>
</div>
);
};在不支持 inert HTML 属性的浏览器中,Disabled 组件可能无法正常工作,建议添加官方 WICG polyfill 以提升兼容性。
Disabled is a component which disables descendant tabbable elements and prevents pointer interaction.
Assuming you have a form component, you can disable all form inputs by wrapping the form with <Disabled>.
import { useState } from 'react';
import { Button, Disabled, TextControl } from '@wordpress/components';
const MyDisabled = () => {
const [ isDisabled, setIsDisabled ] = useState( true );
let input = (
<TextControl
__next40pxDefaultSize
label="Input"
onChange={ () => {} }
/>
);
if ( isDisabled ) {
input = <Disabled>{ input }</Disabled>;
}
const toggleDisabled = () => {
setIsDisabled( ( state ) => ! state );
};
return (
<div>
{ input }
<Button variant="primary" onClick={ toggleDisabled }>
Toggle Disabled
</Button>
</div>
);
};
A component can detect if it has been wrapped in a <Disabled /> by accessing its context using Disabled.Context.
function CustomButton( props ) {
const isDisabled = useContext( Disabled.Context );
return <button { ...props } style={ { opacity: isDisabled ? 0.5 : 1 } } />;
}
Note: this component may not behave as expected in browsers that don’t support the inert HTML attribute. We recommend adding the official WICG polyfill when using this component in your project.
The component accepts the following props:
Whether to disable all the descendant fields. Defaults to true.
Booleantrue