import { Editable } from "@chakra-ui/react"
export const EditableBasic = () => (
<Editable.Root textAlign="start" defaultValue="Click to edit">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
)
用法
import { Editable } from "@chakra-ui/react"
<Editable.Root>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
示例
双击
使用 activationMode
属性,用户双击时可编辑内容。
import { Editable } from "@chakra-ui/react"
export const EditableWithDoubleClick = () => (
<Editable.Root defaultValue="Double click to edit" activationMode="dblclick">
<Editable.Preview />
<Editable.Input />
</Editable.Root>
)
禁用
使用 disabled
属性禁用可编辑组件。
import { Editable } from "@chakra-ui/react"
const Demo = () => {
return (
<Editable.Root disabled defaultValue="Click to edit">
<Editable.Preview opacity={0.5} cursor="not-allowed" />
<Editable.Input />
</Editable.Root>
)
}
文本域
你可以让文本域可编辑。
import { Editable } from "@chakra-ui/react"
const Demo = () => {
return (
<Editable.Root defaultValue="Click to edit">
<Editable.Preview minH="48px" alignItems="flex-start" width="full" />
<Editable.Textarea />
</Editable.Root>
)
}
带控制器
向 Editable
添加“编辑”、“取消”和“提交”等控件,以提供更好的用户体验。
import { Editable, IconButton } from "@chakra-ui/react"
import { LuCheck, LuPencilLine, LuX } from "react-icons/lu"
const Demo = () => {
return (
<Editable.Root defaultValue="Click to edit">
<Editable.Preview />
<Editable.Input />
<Editable.Control>
<Editable.EditTrigger asChild>
<IconButton variant="ghost" size="xs">
<LuPencilLine />
</IconButton>
</Editable.EditTrigger>
<Editable.CancelTrigger asChild>
<IconButton variant="outline" size="xs">
<LuX />
</IconButton>
</Editable.CancelTrigger>
<Editable.SubmitTrigger asChild>
<IconButton variant="outline" size="xs">
<LuCheck />
</IconButton>
</Editable.SubmitTrigger>
</Editable.Control>
</Editable.Root>
)
}
受控
使用 value
和 onValueChange
属性来控制可编辑组件。
"use client"
import { Editable } from "@chakra-ui/react"
import { useState } from "react"
const Demo = () => {
const [name, setName] = useState("")
return (
<Editable.Root
value={name}
onValueChange={(e) => setName(e.value)}
placeholder="Click to edit"
>
<Editable.Preview />
<Editable.Input />
</Editable.Root>
)
}
状态管理
控制可编辑组件的另一种方法是使用 RootProvider
组件和 useEditable
状态管理 Hook。
通过这种方式,你可以从可编辑组件外部访问其状态和方法。
未编辑
"use client"
import { Code, Editable, Stack, useEditable } from "@chakra-ui/react"
const Demo = () => {
const editable = useEditable({
defaultValue: "Click to edit",
})
return (
<Stack align="flex-start">
<Editable.RootProvider value={editable}>
<Editable.Preview />
<Editable.Input />
</Editable.RootProvider>
<Code>{editable.editing ? "editing" : "not editing"}</Code>
</Stack>
)
}
属性
根
属性 | 默认值 | 类型 |
---|---|---|
activationMode | '\'focus\'' | ActivationMode 预览元素的激活模式。 - "focus" - 预览元素获得焦点时进入编辑模式 - "dblclick" - 预览元素被双击时进入编辑模式 - "click" - 预览元素被点击时进入编辑模式 |
selectOnFocus | true | boolean 输入框获得焦点时是否选中文本。 |
submitMode | '\'both\'' | SubmitMode 在编辑模式下触发提交的操作: - "enter" - 按下回车键时触发提交 - "blur" - 可编辑组件失焦时触发提交 - "none" - 不会触发提交。你需要使用提交按钮 - "both" - 按下 `Enter` 键和输入框失焦都会触发提交 |
colorPalette | 'gray' | 'gray' | 'red' | 'orange' | 'yellow' | 'green' | 'teal' | 'blue' | 'cyan' | 'purple' | 'pink' 组件的调色板 |
size | 'md' | 'sm' | 'md' | 'lg' 组件的尺寸 |
asChild | ||
autoResize | boolean 可编辑组件是否应自动调整大小以适应内容。 | |
defaultEdit | boolean 可编辑组件首次渲染时的初始编辑状态。当你不需要控制其编辑状态时使用。 | |
defaultValue | string 可编辑组件首次渲染时的初始值。当你不需要控制可编辑组件的状态时使用。 | |
disabled | boolean 可编辑组件是否被禁用 | |
edit | boolean 可编辑组件是否处于编辑模式。 | |
finalFocusEl | () => HTMLElement | null 可编辑组件关闭时应获得焦点的元素。默认情况下,它将聚焦在触发元素上。 | |
form | string 底层输入框关联的表单。 | |
id | string 机器的唯一标识符。 | |
ids | Partial<{ root: string area: string label: string preview: string input: string control: string submitTrigger: string cancelTrigger: string editTrigger: string }> 可编辑组件中元素的 ID。对于组合很有用。 | |
invalid | boolean 输入值是否无效。 | |
maxLength | number 可编辑组件允许的最大字符数 | |
name | string 可编辑组件的名称属性。用于表单提交。 | |
onEditChange | (details: EditChangeDetails) => void 编辑模式改变时调用的回调函数 | |
onFocusOutside | (event: FocusOutsideEvent) => void 焦点移出组件时调用的函数 | |
onInteractOutside | (event: InteractOutsideEvent) => void 组件外部发生交互时调用的函数 | |
onPointerDownOutside | (event: PointerDownOutsideEvent) => void 指针在组件外部按下时调用的函数 | |
onValueChange | (details: ValueChangeDetails) => void 可编辑组件的值改变时调用的回调函数 | |
onValueCommit | (details: ValueChangeDetails) => void 可编辑组件的值提交时调用的回调函数。 | |
onValueRevert | (details: ValueChangeDetails) => void 按下 Esc 键或点击取消按钮时调用的回调函数 | |
placeholder | string | { edit: string; preview: string } 当 `value` 为空时显示的占位符值 | |
readOnly | boolean 可编辑组件是否为只读 | |
required | boolean 可编辑组件是否为必填项 | |
translations | IntlTranslations 指定用于识别无障碍元素及其状态的本地化字符串 | |
value | string 可编辑组件在编辑和预览模式下的值 |