React-ace: рдРрд╕ рд╕рдВрдкрд╛рджрдХ рдХреЗрд╡рд▓ рдорд╛рдЙрдВрдЯ рдкрд░ рдХрдорд╛рдВрдб рдмрд╛рдВрдзрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдЕрдЧре░ 2019  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: securingsincity/react-ace

рд╕рдВрдХрдЯ

рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдк рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдРрд╕рдПрдбрд┐рдЯрд░ рдорд╛рдЙрдВрдЯ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдВрдз рджреЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдирдП рдмрджрд▓реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдкрд╛рд╕ рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рд╣рд┐рдд рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рдирдореВрдирд╛ рдХреЛрдб рдЖрдкрдХреЗ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

(рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ)
Edit relaxed-goldwasser-qprrd

рд╕рдВрджрд░реНрдн

рдкреНрд░рдЧрддрд┐ рдкрд░: #

Documentation bug question

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ рдПрдлрдПрдордПрд╕-рдХреИрдЯ рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рдо рдХреИрд╕реЗ рдорд┐рд▓рд╛? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

function Example() {
    function save() { ... }

    const ref = useRef(save)

    return (
      <AceEditor commands={[
        {
          name: 'save',
          bindKey: {
            win: 'Ctrl-enter',
            mac: 'Cmd-enter',
          },
          exec: () => ref.current(),
        },
      ]}/>
    )
}

рд╕рднреА 5 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрдХрд░рд╛рдпрд╛ рдФрд░ Editor getValue() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдорд┐рд▓рд╛ред

рддреЛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк handleSubmit рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред

const handleSubmit = (editor) => {
  const text = editor.getValue();
  window.alert("You submitted the text: " + text);
};

https://codesandbox.io/s/confident-neumann-99zmk

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЬрдбрд╝ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдкрд╛рджрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреИрд░реЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕ рд╕рдВрдкрд╛рджрдХ рдШрдЯрдХ рдХреЛ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдЖрджреЗрд╢ рдХреЛ рдмрдврд╝рддреЗ рдкрд░ рдмрд╛рдБрдзрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб useRef рдФрд░ () => referencedFunction.current() рдмрдЬрд╛рдп exec рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реИ

@ рдПрдлрдПрдордПрд╕-рдХреИрдЯ рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рдо рдХреИрд╕реЗ рдорд┐рд▓рд╛? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

function Example() {
    function save() { ... }

    const ref = useRef(save)

    return (
      <AceEditor commands={[
        {
          name: 'save',
          bindKey: {
            win: 'Ctrl-enter',
            mac: 'Cmd-enter',
          },
          exec: () => ref.current(),
        },
      ]}/>
    )
}

рдЬрдм рддрдХ рдпрд╣ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджреЛ рд╡рд░реНрдХрдЖрд░реНрдб рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИ

Editor.getValue () [рд╕рдлрд╛рдИ рдХрд░реНрдордЪрд╛рд░реА]

// `onSave` shouldn't have to pass the content 
// back up the chain since onChange already did that,
// hence calling this a workaround.
function Example({ content, onChange, onSave }) {
  return (
    <AceEditor
      content={content}
      onChange={c => onChange(c)}
      commands={[{
        name: 'save',
        bindKey: { win: 'Ctrl-enter', mac: 'Cmd-enter' },
        exec: editor => onSave(editor.getValue()),
      }]}
    />
  );
}

рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

function Example({ content, onChange, onSave }) {
  const editor = useRef(null)

  return (
    <AceEditor
      ref={editor}
      content={content}
      onChange={c => onChange(c)}
      commands={[{
        name: 'save',
        bindKey: { win: 'Ctrl-enter', mac: 'Cmd-enter' },
        exec: () => onSave(editor.current.props.value),
      }]}
    />
  );
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

henviso picture henviso  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

danush picture danush  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dmavrin picture dmavrin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Bobcui001 picture Bobcui001  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

avalkowsky picture avalkowsky  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ