рдЬрдм React.js 16.8 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рддреЛ рд╣рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рд╣реБрдХ рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдо рд╕рднреА React.js рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рд╣реБрдХ рдЧрд░реНрднрд╛рдзрд╛рди рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╛рдпрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдЖрдкрдХреЛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╣реБрдХ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред
рдореИрдВ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдпрд╣ рд╡рд┐рд╖рдп рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рддреЛ рдореИрдВ рд╣реБрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд╣реБрдХ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рд░реВрдк рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рдЗрдирдкреБрдЯ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдорд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред
рд╡рд░реНрдЧ рд╕рдВрдХреЗрддрди рдХреЗ рд╕рд╛рде, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
class Form extends React.Component { state = { // Fields values fields: {}, }; render() { return ( <form> {/* Inputs render */} </form> ); }; }
рдЖрдЗрдП рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЬрдм рднреА рд╣рдо рдмрджрд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдЦреЗрддреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХ рдмреИрдХрдПрдВрдб рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ shallowEqual
- shallowEqual
рдФрд░ shallowEqual
рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред
class Form extends React.Component { constructor(props) { super(props); this.saveToDraft = debounce(500, this.saveToDraft); }; state = { // Fields values fields: {}, // Draft saving meta draft: { isSaving: false, lastSaved: null, }, }; saveToDraft = (data) => { if (this.state.isSaving) { return; } this.setState({ isSaving: true, }); makeSomeAPICall().then(() => { this.setState({ isSaving: false, lastSaved: new Date(), }) }); } componentDidUpdate(prevProps, prevState) { if (!shallowEqual(prevState.fields, this.state.fields)) { this.saveToDraft(this.state.fields); } } render() { return ( <form> {/* Draft saving meta render */} {/* Inputs render */} </form> ); }; }
рд╣реБрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдШрдЯрдХ:
const Form = () => { // Our state const [fields, setFields] = useState({}); const [draftIsSaving, setDraftIsSaving] = useState(false); const [draftLastSaved, setDraftLastSaved] = useState(false); useEffect(() => { const id = setTimeout(() => { if (draftIsSaving) { return; } setDraftIsSaving(true); makeSomeAPICall().then(() => { setDraftIsSaving(false); setDraftLastSaved(new Date()); }); }, 500); return () => clearTimeout(id); }, [fields]); return ( <form> {/* Draft saving meta render */} {/* Inputs render */} </form> ); }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдХреЛрдИ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ this.state
рдХрд┐рдпрд╛ред useState
this.state
рдХреЛ useState
рд╣реБрдХ рдФрд░ рдорд╕реМрджрд╛ рдХреЛ рдЕрдм useEffect
рд╣реБрдХ рдореЗрдВ useEffect
ред
рдЬреЛ рдЕрдВрддрд░ рдореИрдВ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ (рдПрдХ рдФрд░ рдЕрдВрддрд░ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛): рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ рдШрдЯрдХ рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// useDraft hook can be used in any other component const useDraft = (fields) => { const [draftIsSaving, setDraftIsSaving] = useState(false); const [draftLastSaved, setDraftLastSaved] = useState(false); useEffect(() => { const id = setTimeout(() => { if (draftIsSaving) { return; } setDraftIsSaving(true); makeSomeAPICall().then(() => { setDraftIsSaving(false); setDraftLastSaved(new Date()); }); }, 500); return () => clearTimeout(id); }, [fields]); return [draftIsSaving, draftLastSaved]; } const Form = () => { // Our state const [fields, setFields] = useState({}); const [draftIsSaving, draftLastSaved] = useDraft(fields); return ( <form> {/* Draft saving meta render */} {/* Inputs render */} </form> ); }
рдФрд░ рд╣рдо рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ useDraft
рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рд╣реБрдХ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рддрд░реАрдХреЗ рд╕реЗ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ
рдЪрд▓реЛ рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪреИрдЯ рд╕реНрдХреНрд░реАрди, рдЪреИрдЯ рд╕реВрдЪреА рдФрд░ рд╕рдВрджреЗрд╢ рдлрд╝реЙрд░реНрдоред рдЗрд╕ рддрд░рд╣:
class ChatApp extends React.Component { state = { currentChat: null, }; handleSubmit = (messageData) => { makeSomeAPICall(SEND_URL, messageData) .then(() => { alert(`Message is sent to chat ${this.state.currentChat}`); }); }; render() { return ( <Fragment> <ChatsList changeChat={currentChat => { this.setState({ currentChat }); }} /> <CurrentChat id={currentChat} /> <MessageForm onSubmit={this.handleSubmit} /> </Fragment> ); }; }
рдлрд┐рд░ рдЗрд╕ рдЪреИрдЯ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:
- рд╡реЗ рдЪреИрдЯ 1 рдЦреЛрд▓рддреЗ рд╣реИрдВ
- рд╡реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдХреБрдЫ рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ)
- рд╡реЗ рдЪреИрдЯ 2 рдЦреЛрд▓рддреЗ рд╣реИрдВ
- рд╡реЗ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рд░реНрдЯ рджреЗрдЦрддреЗ рд╣реИрдВ:
- "рд╕рдВрджреЗрд╢ рдЪреИрдЯ 2 рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ"
рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рджреВрд╕рд░реА рдЪреИрдЯ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛, рдпрд╣ рдХреИрд╕реЗ рдЦреБрд╢ рд╣реБрдЖ? рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рд╕ рдкрджреНрдзрддрд┐ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ, рди рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣ рдореВрд▓реНрдп рдЬрдм рд╣рдо рдПрдХ рд╕рдВрджреЗрд╢ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рдереЗред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрдЧ рдХрд╛ рд╕реНрд░реЛрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реЗ рд╣рд╛рде рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
const ChatApp = () => { const [currentChat, setCurrentChat] = useState(null); const handleSubmit = useCallback( (messageData) => { makeSomeAPICall(SEND_URL, messageData) .then(() => { alert(`Message is sent to chat ${currentChat}`); }); }, [currentChat] ); render() { return ( <Fragment> <ChatsList changeChat={setCurrentChat} /> <CurrentChat id={currentChat} /> <MessageForm onSubmit={handleSubmit} /> </Fragment> ); }; }
рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ:
- рд╡реЗ рдЪреИрдЯ 1 рдЦреЛрд▓рддреЗ рд╣реИрдВ
- рд╡реЗ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдХреБрдЫ рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ)
- рд╡реЗ рдЪреИрдЯ 2 рдЦреЛрд▓рддреЗ рд╣реИрдВ
- рд╡реЗ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рд░реНрдЯ рджреЗрдЦрддреЗ рд╣реИрдВ:
- "рд╕рдВрджреЗрд╢ рдЪреИрдЯ 1 рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ"
рдЦреИрд░, рдХреНрдпрд╛ рдмрджрд▓рд╛ рд╣реИ? рдЕрдм рд╣рдо рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд░реЗрдВрдбрд░ рдкрд▓ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдПрдХ рдирдпрд╛ handleSubmit
рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрдм рднреА currentChat
handleSubmit
рд╣рд░ рдмрд╛рд░ currentChat
ред рдпрд╣ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдиреЗ рдФрд░ рдЕрднреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╣рд░ рдШрдЯрдХ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╣рд░ рдЪреАрдЬ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИ ред
рд╣реБрдХ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреАрд╡рдирдЪрдХреНрд░ рдмрдирд╛ рджреЗрддреЗ рд╣реИрдВ
рдпрд╣ рдХрд╛рд░рдг рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдПрдХ рдШреЛрд╖рд┐рдд рдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рд╡рд┐рдХреГрддреАрдХрд░рдг UI рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рдбреЛрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдлрд┐рд░ рднреА, рдЬрдм рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- рдмрдврд╝рддреЗ
- рдЕрджреНрдпрддрди рдХрд░рдирд╛ (рдЬрдм рднреА
state
рдпрд╛ props
рдмрджрд▓реЗ рдЧрдП) - рдЕрдирдорд╛рдЙрдВрдЯ
рдпрд╣ рдЖрд╢реНрд╡рд╕реНрдд рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реА рдЖрджрддреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╣рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╣рдорд╛рд░реЗ UI рдХреЛ рдмрдирд╛рддрд╛ рд╣реИред
рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ useEffect
рд╣реБрдХ, componentDidUpdate
, componentDidUpdate
рдФрд░ рдЕрдиреНрдп рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ useEffect
рддреЛ рд╣рдордиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛: "рдЕрд░реЗ, рдореЗрд░реЗ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдмрдирд╛рдПрдВ"ред
рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝реЗ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: рдореБрдЭреЗ рдпреВрдЖрдИ рджреЗрдВ рдЬрдм рд░рд╛рдЬреНрдп
0
ред - рдЖрдкрдХрд╛ рдШрдЯрдХ:
- рдпрд╣рд╛рдБ рд░реЗрдВрдбрд░ рд░рд┐рдЬрд▓реНрдЯ рд╣реИ:
<p>You clicked 0 times</p>
ред - рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЪрд▓рд╛рдирд╛ рднреА рдпрд╛рдж рд░рдЦреЗрдВ:
() => { document.title = 'You clicked 0 times' }
ред
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: рдЬрд╝рд░реВрд░ рдпреВрдЖрдИ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред рдЕрд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдореИрдВ рдХреБрдЫ рд╕рд╛рдорд╛рди рдбреЛрдо рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБред
- рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреВрд▓, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ред
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдкреНрд░рднрд╛рд╡ рдХреЛ рдЪрд▓рд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБред
- рд░рдирд┐рдВрдЧ
() => { document.title = 'You clicked 0 times' }
ред
рдпрд╣ рдЕрдзрд┐рдХ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд╣реИ, рд╣реИ рдирд╛?
рд╕рдорд╛рдкрди рдореЗрдВ
рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рд╣рдореЗрдВ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдмрд╕ рдЕрдкрдирд╛ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░реЙрдкрд░ рд╕реЗ рдпреВрдЖрдИ рдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рд╡реЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рдХреНрд╖рдг рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЦреИрд░, рд╣рдореЗрдВ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рд╣реЗ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдХрдХреНрд╖рд╛ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛?