๐Ÿ“ Sign Up | ๐Ÿ” Log In

โ† Root | โ†‘ Up

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“„ shadcn/directory/udecode/plate/(guides)/controlled.cn โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘

title: ๅ—ๆŽง็ผ–่พ‘ๅ™จๅ€ผ description: ๅฆ‚ไฝ•ๆŽงๅˆถ็ผ–่พ‘ๅ™จ็š„ๅ€ผใ€‚

ๅœจ Plate ไธญๅฎž็ŽฐๅฎŒๅ…จๅ—ๆŽง็š„็ผ–่พ‘ๅ™จๅ€ผ่พƒไธบๅคๆ‚๏ผŒๅŽŸๅ› ๅฆ‚ไธ‹๏ผš

  1. ็ผ–่พ‘ๅ™จ็Šถๆ€ไธไป…ๅŒ…ๅซๅ†…ๅฎน (editor.children)๏ผŒ่ฟ˜ๅŒ…ๅซ editor.selection ๅ’Œ editor.historyใ€‚

  2. ็›ดๆŽฅๆ›ฟๆข editor.children ๅฏ่ƒฝไผš็ ดๅ้€‰ๅŒบ(selection)ๅ’Œๅކๅฒ่ฎฐๅฝ•(history)๏ผŒๅฏผ่‡ดๆ„ๅค–่กŒไธบๆˆ–ๅดฉๆบƒใ€‚

  3. ๆ‰€ๆœ‰ๅฏน็ผ–่พ‘ๅ™จๅ€ผ็š„ๆ›ดๆ”น้ƒฝๅบ”้€š่ฟ‡ Transforms ่ฟ›่กŒ๏ผŒไปฅไฟๆŒไธŽ้€‰ๅŒบ(selection)ๅ’Œๅކๅฒ่ฎฐๅฝ•(history)็š„ไธ€่‡ดๆ€งใ€‚

้‰ดไบŽ่ฟ™ไบ›ๆŒ‘ๆˆ˜๏ผŒ้€šๅธธๅปบ่ฎฎๅฐ† Plate ไฝœไธบ้žๅ—ๆŽง่พ“ๅ…ฅไฝฟ็”จใ€‚ไฝ†ๅฆ‚ๆžœ้œ€่ฆไปŽๅค–้ƒจๆ›ดๆ”น็ผ–่พ‘ๅ™จๅ†…ๅฎน๏ผŒๅฏไปฅไฝฟ็”จ editor.tf.setValue(value) ๅ‡ฝๆ•ฐใ€‚

<Callout type="warning" title="ๆ€ง่ƒฝ่€ƒ้‡"> ไฝฟ็”จ `editor.tf.setValue` ไผšๅœจๆฏๆฌก่ฐƒ็”จๆ—ถ้‡ๆ–ฐๆธฒๆŸ“ๆ‰€ๆœ‰่Š‚็‚น๏ผŒๅ› ๆญคๅบ”่ฐจๆ…Žไฝฟ็”จใ€‚ ๅฆ‚ๆžœ้ข‘็น่ฐƒ็”จๆˆ–ๅค„็†ๅคงๅž‹ๆ–‡ๆกฃ๏ผŒๅฏ่ƒฝไผšๅฝฑๅ“ๆ€ง่ƒฝใ€‚ </Callout>

ๆˆ–่€…๏ผŒๆ‚จๅฏไปฅไฝฟ็”จ editor.tf.reset() ๆฅ้‡็ฝฎ็ผ–่พ‘ๅ™จ็Šถๆ€๏ผŒ่ฟ™ๅฐ†ๅŒๆ—ถ้‡็ฝฎ้€‰ๅŒบ(selection)ๅ’Œๅކๅฒ่ฎฐๅฝ•(history)ใ€‚

ๅผ‚ๆญฅๅˆๅง‹ๅ€ผ

ๆ‚จๅฏไปฅไฝฟ็”จ skipInitialization ๅปถ่ฟŸ็ผ–่พ‘ๅ™จๅˆๅง‹ๅŒ–๏ผŒ็›ดๅˆฐๅผ‚ๆญฅๆ•ฐๆฎๅ‡†ๅค‡ๅฐฑ็ปชใ€‚็„ถๅŽ่ฐƒ็”จ editor.tf.init ๅนถไผ ๅ…ฅๆ‚จ็š„ๅ€ผ๏ผš

function AsyncControlledEditor() {
  const [initialValue, setInitialValue] = React.useState();
  const [loading, setLoading] = React.useState(true);
  const editor = usePlateEditor({
    skipInitialization: true,
  });

  React.useEffect(() => {
    // ๆจกๆ‹Ÿๅผ‚ๆญฅ่Žทๅ–
    setTimeout(() => {
      setInitialValue([
        {
          type: 'p',
          children: [{ text: 'ๅทฒๅŠ ่ฝฝๅผ‚ๆญฅๅ€ผ๏ผ' }],
        },
      ]);
      setLoading(false);
    }, 1000);
  }, []);

  React.useEffect(() => {
    if (!loading && initialValue) {
      editor.tf.init({ value: initialValue, autoSelect: 'end' });
    }
  }, [loading, initialValue, editor]);

  if (loading) return <div>ๅŠ ่ฝฝไธญโ€ฆ</div>;

  return (
    <Plate editor={editor}>
      <EditorContainer>
        <Editor />
      </EditorContainer>
    </Plate>
  );
}
<ComponentPreview name="controlled-demo" padding="md" />
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โ† Root | โ†‘ Up