BlogEtcReact, React Native falsy value rendering

React, React Native falsy value rendering

ReactReact NativeT/F비고
true렌더링 X렌더링 XTruthy
false렌더링 X렌더링 XFalsy
number렌더링 O렌더링 OTruthyRN은 <Text> 내부에서만 가능
0렌더링 O오류 발생 가능FalsyRN은 <Text> 내부에서만 가능
string렌더링 O렌더링 OTruthyRN은 <Text> 내부에서만 가능
""렌더링 O렌더링 XFalsy
[1,2]렌더링 O렌더링 OTruthyRN은 <Text> 내부에서만 가능
[]렌더링 X렌더링 XTruthyRN은 <Text> 내부에서만 가능
null렌더링 X렌더링 XFalsy
undefined렌더링 X렌더링 XFalsy
NaN렌더링 O오류 발생 가능FalsyRN은 <Text> 내부에서만 가능
object오류오류FalsyJSX에서 객체 직접 렌더링 불가

React에서 안전한 렌더링

  • 0이 있을 수 있다면 Boolean Type Casting
import { useState } from "react";
 
export const Counter = () => {
  const [count, setCount] = useState(0);
 
  return (
    <>
      {/* 🚫 0이 렌더링됩니다. */}
      {count && "보여줄 글자"}
 
      {/* ⚠️  Boolean으로 Type Casting한다는 의도가 명확하게 드러나지 않을 수 있습니다. */}
      {!!count && "보여줄 글자"}
 
      {/* ✅ Good. */}
      {Boolean(count) && "보여줄 글자"}
    </>
  );
};

React Native에서 안전한 렌더링

  • 0, NaN이 있을 수 있다면 Boolean Type Casting
import { useState } from "react";
 
export const Counter = () => {
  const [count, setCount] = useState(0);
 
  return (
    <View>
      {/* 🚫 NaN을 렌더링할 수 없어 에러가 발생합니다.  */}
      {NaN}
 
      {/* 🚫 0을 렌더링할 수 없어 에러가 발생합니다.  */}
      {count && <Text>보여줄 글자</Text>}
 
      {/* 🚫 Text 태그로 감싸야 합니다.  */}
      {!count && "보여줄 글자"}
 
      {/* ⚠️ Boolean으로 Type Casting한다는 의도가 명확하게 드러나지 않을 수 있습니다. */}
      <View>{!!count && "보여줄 글자"}</View>
 
      {/* ✅ Good. */}
      <View>{Boolean(count) && "보여줄 글자"}</View>
    </View>
  );
};

Copyright ⓒ FE-dudu. All rights reserved.