β οΈ μ 리ν λ΄μ©μ μ€νλ μλͺ»λ μ λ³΄κ° μμ μ μμ΅λλ€. λκΈλ‘ μλ €μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
UI μΌλΆλΆμ μ‘΄μ¬νλ μλ°μ€ν¬λ¦½νΈ μλ¬κ° μ 체 μ ν리μΌμ΄μ μ μ€λ¨μμΌμλ μλλ€. React16μμ μλ¬ κ²½κ³λΌλ μλ‘μ΄ κ°λ μ΄ λμ λμλ€.
μλ¬ κ²½κ³λ νμ μ»΄ν¬λνΈ νΈλ¦¬μ μ΄λμμλ μλ°μ€ν¬λ¦½νΈ μλ¬λ₯Ό κΈ°λ‘νλ©° κΉ¨μ§ μ»΄ν¬λνΈ νΈλ¦¬ λμ ν΄λ°± UIλ₯Ό 보μ¬μ£Όλ 리μ‘νΈ μ»΄ν¬λνΈμ΄λ€. μλ¬ κ²½κ³λ λ λλ§ λμ€ μλͺ μ£ΌκΈ° λ©μλ λ° κ·Έ μλμ μλ μ 체 νΈλ¦¬μμ μλ¬λ₯Ό μ‘μλΈλ€.
*μλ¬ κ²½κ³κ° ν¬μ°©νμ§ μλ μλ¬λ€
ν΄λμ€ μ»΄ν¬λνΈμ static getDerivedStateFromError()
λλ componentDidCatch()
λ₯Ό μ μν κ²½μ° ν΄λΉ μ»΄ν¬λνΈλ Error boundaryκ° λλ€.
μλ¬κ° λ°μν λ€μ ν΄λ°± UIλ₯Ό λ λλ§νλ €λ©΄Β static getDerivedStateFromError()
λ₯Ό μ¬μ©νλ€. μλ¬ μ 보λ₯Ό κΈ°λ‘νλ €λ©΄Β componentDidCatch()
λ₯Ό μ¬μ©νλ©΄ λλ€.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// λ€μ λ λλ§μμ ν΄λ°± UIκ° λ³΄μ΄λλ‘ μνλ₯Ό μ
λ°μ΄νΈ ν©λλ€.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// μλ¬ λ¦¬ν¬ν
μλΉμ€μ μλ¬λ₯Ό κΈ°λ‘ν μλ μμ΅λλ€.
logErrorToMyService(error, errorInfo);
}
render() {
if (this.state.hasError) {
// ν΄λ°± UIλ₯Ό 컀μ€ν
νμ¬ λ λλ§ν μ μμ΅λλ€.
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
μμ κ°μ΄ μ μ©νκ³ μΌλ° μ»΄ν¬λνΈλ‘ μ¬μ©νλ€.
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>
μλ¬ κ²½κ³λ μλ°μ€ν¬λ¦½νΈμ catch {}
ꡬ문과 μ μ¬νκ² λμνμ§λ§ μ»΄ν¬λνΈμ μ μ©λλ€. μ€μ§ ν΄λμ€ μ»΄ν¬λνΈλ§μ΄ μλ¬ κ²½κ³κ° λ μ μλ€.
μλ² μ¬μ΄λ νλ μμν¬κ° μΆ©λμ ν΄κ²°νλ κ²μ²λΌ μ΅μμ κ²½λ‘μ μ»΄ν¬λνΈλ₯Ό κ°μΈμ μ μ μκ² βλ¬Έμ κ° λ°μνμ΅λλ€βλΌλ λ©μμ§λ₯Ό 보μ¬μ€ μ μλ€.
React 16λΆν°λ μλ¬ κ²½κ³μμ ν¬μ°©λμ§ μμ μλ¬λ‘ μΈν΄ μ 체 React μ»΄ν¬λνΈ νΈλ¦¬μ λ§μ΄νΈκ° ν΄μ λ©λλ€.
μμλ UIλ₯Ό μμ ν μ κ±°νλ κ²λ³΄λ€ κ·Έλλ‘ λ¨κ²¨λλ κ²μ΄ λ μ’μ§ μκΈ° λλ¬Έμ΄λ€. μλ₯Ό λ€μ΄ λ©μ μ μ κ°μ μ νμμ μμλ UIλ₯Ό κ·Έλλ‘ λ¨κ²¨λλ©΄ λκ΅°κ°κ° μλͺ»λ μ¬λμκ² λ©μμ§λ₯Ό 보λ΄κ² λ κ°λ₯μ±μ΄ μλ€.
μ΄ λ³κ²½μ¬νμ React 16μΌλ‘ λ§μ΄κ·Έλ μ΄μ ν λ μ ν리μΌμ΄μ μμ μ΄μ μ μλ €μ§μ§ μμλ κΈ°μ‘΄μ μ‘΄μ¬νλ μΆ©λμ λ°κ²¬ν μ μμμ μλ―Ένλ€. μλ¬ κ²½κ³λ₯Ό μΆκ°ν¨μΌλ‘μ¨ λ¬Έμ κ° λ°μνμ λ λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μλ€.
React 16μ μ ν리μΌμ΄μ μ΄ μ€μλ‘ μλ¬λ₯Ό μ§μ΄μΌν¨ κ²½μ°μλ κ°λ° κ³Όμ μμ λ λλ§νλ λμ λ°μν λͺ¨λ μλ¬λ₯Ό μ½μμ μΆλ ₯νλ€. μλ¬ λ©μμ§ λ° μλ°μ€ν¬λ¦½νΈ μ€νκ³Ό λλΆμ΄ React 16μ μ»΄ν¬λνΈ μ€ν μΆμ λν μ 곡νλ€. μ΄μ μ νν μ»΄ν¬λνΈ νΈλ¦¬μ μ΄λ λΆλΆμμ μλ¬κ° λ°μνλμ§ νμΈν μ μκ² λμλ€.
try/catch
λ λͺ
λ Ήν μ½λμμλ§ λμνλ€.
try {
showButton();
} catch (error) {
// ...
}
κ·Έλ¬λ React μ»΄ν¬λνΈλ μ μΈμ μ΄λ©° 무μμ λ λλ§ν μ§ κ΅¬μ²΄ννλ€.
<Button />
μλ¬ κ²½κ³λ Reactμ μ μΈμ μΈ νΉμ±μ 보쑴νκ³ μμν λλ‘ λμνλ€.
μλ¬ κ²½κ³λ μ΄λ²€νΈ νΈλ€λ¬ λ΄λΆμμλ μλ¬λ₯Ό ν¬μ°©νμ§ μλλ€.
Reactλ μ΄λ²€νΈ νΈλ€λ¬μ μλ¬λ₯Ό ν΄κ²°νκΈ° μν΄μ μλ¬ κ²½κ³λ₯Ό νμλ‘ νμ§ μλλ€. render λ©μλ λ° μλͺ μ£ΌκΈ° λ©μλμ λ¬λ¦¬ μ΄λ²€νΈ νΈλ€λ¬λ λ λλ§ μ€μ λ°μνμ§ μλλ€. λ°λΌμ μ΄λ²€νΈ νΈλ€λ¬κ° μλ¬λ₯Ό λμ Έλ Reactλ μ¬μ ν νλ©΄μ 무μμ νμν΄μΌ ν μ§ μκ³ μλ€.
μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ μλ¬λ₯Ό μ‘μμΌ νλ κ²½μ°μ μΌλ° μλ°μ€ν¬λ¦½νΈμΒ try
Β /Β catch
 ꡬ문μ μ¬μ©νλ©΄ λλ€!
리μ‘νΈλ κ³Όκ±°μ μ»΄ν¬λνΈ λ΄μμ μλ¬λ₯Ό μ²λ¦¬νλ λ°©λ²μ μ 곡νμ§ μμμκ³ κ·Έ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ λ κ°λ μ΄ μλ¬ κ²½κ³μ΄λ€. μ€μ§ ν΄λμ€ μ»΄ν¬λνΈλ§ μ¬μ©ν μ μκΈ° λλ¬Έμ μ€μ λ‘ μ¬μ©ν μΌμ λλ¬Όκ² μ§λ§ μ΄λ° κ²λ μꡬλ μλ‘ μκ²λμ΄μ μ’μλ€.