π‘React State Tips
π Useful lessons I've learned about Handling react stateλ₯Ό λ³΄κ³ μ 리ν κΈμ λλ€.
1. μν(state)λ₯Ό λ€λ£¨λ λ°©λ²κ³Ό κ°κ° νμν μν©μ μκ³ μλ€.

2. ν΄λμ€ μ»΄ν¬λνΈλ λμ΄μ μ¬μ©νμ§ μλλ€.
βοΈ ν¨μν μ»΄ν¬λνΈμ μ₯μ
μ½λ μ κ°μ, hooks μ¬μ©, μ΄ν΄ κ°λ¨ν¨,
this
ν€μλ μμ
3. κΈ°μ‘΄ μν/μμ±(props)λ‘λΆν° νμλ μν(derived state)λ₯Ό μ¬μ©νλ€.

export default function Checkout() {
const { dispatch } = useCart();
const [address, setAddress] = useState(emptyAddress);
const [satus, setStatus] = useState(STATUS.IDLE);
const [saveError, setSaveError] = useState(null);
const [touched, setTouched] = useState({});
// derived state
const errors = getErrors(address);
const isValid = Object.keys(errors).length === 0;
//...
}
4. π₯ 리μ‘νΈ λ λλ§ μμ κ³Ό λ λλ§ λ°©μ§λ²μ μκ³ μλ€.

5. λλΆλΆμ μνλ 리λͺ¨νΈμ΄λ€.
useApi
κ°μ custom hook, react-query, swr λ±μ μ¬μ©νμ¬ λ¦¬λͺ¨νΈ μνλ₯Ό κ°μνimport React from "react"; import useFetch from "./useFetch"; export default function App() { const { data: products, loading, error } = useFetch("products"); if(loading) return "Loading..."; if(error) throw error; return // JSX }
6. λ‘컬 μνλΆν° μμν΄λΌ. κΈλ‘λ² μνλ μ΅νμ μλ¨μ΄λ€.
μμ±(props) μ λ¬ κ³Όμ μ΄ λ³΅μ‘ν΄μ§λ©΄, Contextλ Redux μ¬μ©μ κ³ λ €ν΄λ³Ό μ μλ€.
7. Lodash, Underscore, Ramdaλ₯Ό μ¬μ©νμ§ λ§κ³ , immutableJS
λ₯Ό λ°μλ€μ¬λΌ.
immutableJS
λ₯Ό λ°μλ€μ¬λΌ.βοΈ μλ°μ€ν¬λ¦½νΈμμ λΆλ³ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°©μ
Object.assign
Spread syntax:
{ ...myObj }
Immutable array methods:
.map
,.filter
,.find
,.some
,.every
,.reduce
λ±
8. νΌ(form) λΌμ΄λΈλ¬λ¦¬λ νμ μλ€. ν¨ν΄μ΄ νμνλ€.

9. π₯ μ¬λ¬ μνλ μ΄κ±°ν(enum)μΌλ‘ μμ±νλ€.
// Using seperate state to track the form's status ππ»
const [submitting, setSubmitting] = useState(false);
const [submitted, setSubmitted] = useState(false);
const [completed, setCompleted] = useState(false);
// Using a single status enum instead π
const STATUS = {
IDLE: "IDLE",
SUBMITTING: "SUBMITTING",
SUBMITTED: "SUBMITTED",
COMPLETED: "COMPLETED",
};
const [status, setStatus] = useState(STATUS.IDLE);
Last updated