рдирдорд╕реНрддреЗ, рдпрд╣ рдПрдХ рдкреНрд░рд╢реНрди рдХреА рддрд░рд╣ рд╣реИ, рдореИрдВ componentDidUpdate
рдореЗрдВ рдбреЛрдо рд╣реЗрд░рдлреЗрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЪрд░реНрдЪрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБред рдЗрд╕реЗ рдХреБрдЫ DOM рдЧрдгрдирд╛рдПрдБ рдХрд░рдиреА рдкрдбрд╝рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ CSS рдЗрддрдирд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд╡рд░ рдХрд░ рд╕рдХреЗ рдЬреЛ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрд╕реА рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреБрдЫ рдЕрдиреНрдп рдбреАрдУрдПрдо рддрддреНрд╡ рдХреЗ getBoundingClientRect() рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред
рддреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
1) getBoundingClientRect
рдЧрдгрдирд╛ componentDidUpdate
рдФрд░ рдкрд░рд┐рдХрд▓рд┐рдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде setState
рдХреЙрд▓ рдХрд░реЗрдВред рдореИрдВ рдЕрдирдВрдд рд▓реВрдк рд╕реЗ рдбрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред
2) рдЗрд╕реЗ 1 рдореЗрдВ рдкрд╕рдВрдж рдХрд░реЗрдВ) рдФрд░ shouldComponentUpdate
рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдФрд░ рдкрдардиреАрдп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╕рд╛рдордиреЗ рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВред
3) рдХрдВрдкреЛрдиреЗрдВрдЯрдбрд┐рдбрдЕрдкрдбреЗрдЯ рд╕реЗ рдбреЛрдо рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдпрд╣ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд░рд▓, рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдареАрдХ рддрд░реАрдХрд╛ рд╣реИред рдХреНрдпрд╛ componentDidUpdate
рдореЗрдВ DOM рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдареАрдХ рд╣реИ? рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ render
рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд▓реЗ render
рдореИрдВ рдлрд┐рд░ рд╕реЗ DOM рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
componentDidMount() {
this.recalculateIndent();
}
componentDidUpdate() {
this.recalculateIndent();
}
recalculateIndent() {
// calculate indent based on getBoundingClientRect of some DOM reference
this.textareaRef.style.textIndent = `${indent}px`;
}
render() {
return (
...
<textarea ref={ref => this.textareaRef = ref}/>
...
);
}
рдареЛрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдзрд╛рди (рдШрдЯрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐) рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдбреЛрдо рд╣реЗрд░рдлреЗрд░ рдЧрд▓рдд рд╣реИред рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред рдореЗрд░реЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг "рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕реНрдб рд╣реЗрдбрд░ + рдЯреЗрдмрд▓ рдмреЙрдбреА рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ", рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рд╕рд╣реА рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред
@jvorcak componentDidUpdate
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реЗрдВрдбрд░ рдХреЗ рдмрд╛рдж рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ DOM рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИред рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
рдЬрдм рдШрдЯрдХ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рддреЛ рдЗрд╕реЗ рдбреАрдУрдПрдо рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕рд╛рде рд╣реА, рд╣рдо рдХреЗрд╡рд▓ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рдХрд╣реАрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдЪрд░реНрдЪрд╛.рд░рд┐рдПрдХреНрдЯрдЬ.рдСрд░реНрдЧ рдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛред рдзрдиреНрдпрд╡рд╛рдж!
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@jvorcak
componentDidUpdate
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реЗрдВрдбрд░ рдХреЗ рдмрд╛рдж рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ DOM рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИред рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░:рд╕рд╛рде рд╣реА, рд╣рдо рдХреЗрд╡рд▓ рдлреАрдЪрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЛ рдХрд╣реАрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдЪрд░реНрдЪрд╛.рд░рд┐рдПрдХреНрдЯрдЬ.рдСрд░реНрдЧ рдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛред рдзрдиреНрдпрд╡рд╛рдж!