рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдРрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдк рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдРрд╕рдПрдбрд┐рдЯрд░ рдорд╛рдЙрдВрдЯ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдВрдз рджреЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдирдП рдмрджрд▓реЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдкрд╛рд╕ рд╣реЛрдЧрд╛ред
рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рд╣рд┐рдд рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
(рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ)
рдкреНрд░рдЧрддрд┐ рдкрд░: #
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрдХрд░рд╛рдпрд╛ рдФрд░ Editor
getValue()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдорд┐рд▓рд╛ред
рддреЛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк handleSubmit
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред
const handleSubmit = (editor) => {
const text = editor.getValue();
window.alert("You submitted the text: " + text);
};
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЬрдбрд╝ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдкрд╛рджрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреИрд░реЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕ рд╕рдВрдкрд╛рджрдХ рдШрдЯрдХ рдХреЛ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдЖрджреЗрд╢ рдХреЛ рдмрдврд╝рддреЗ рдкрд░ рдмрд╛рдБрдзрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб 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(),
},
]}/>
)
}
рдЬрдм рддрдХ рдпрд╣ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рджреЛ рд╡рд░реНрдХрдЖрд░реНрдб рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИ
// `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),
}]}
/>
);
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@ рдПрдлрдПрдордПрд╕-рдХреИрдЯ рдЖрдкрдХреЛ рдпрд╣ рдХрд╛рдо рдХреИрд╕реЗ рдорд┐рд▓рд╛? рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?