April 08, 2022
변경을 하면 (예를들어 글 쓰기)
let posts = []
const writePost = post => {
posts.push(post)
$('.posts').append(`
<div>${post.title}</div>
`)
// document 에 대한 사이드 이펙트가 있음
}
const writeImagePost = posts => {
posts.push(post)
$('.posts').append(`
<div>${post.title}</div>
`)
}
const Posts = () => {
const [posts, setPosts] = useState([])
const writePost = post => {
setPosts([...posts, post])
}
const writeImagePost = post => {
setPosts([...posts, post])
}
return (
<div>
{posts.map(x => (
<div>{x.title}</div>
))}
</div>
)
}
one way binding 이라서 원론적으로는 안되는데 (부모에서 -> 자식으로만 값이 내려갈 수 있음)
값이 아니라 이벤트 방식으로 콜백(onChange) 함수를 전달하는 방식으로 해결 해야 한다.
상태 관리를 사용한다
ref 를 사용한다.
const Input = React.forwardRef((props, ref) => {
return <input onChange={e => (ref.current = e.target.value)} />
})
const Form = () => {
const nameRef = useRef('')
console.log(nameRef.current)
return <Input ref={nameRef} />
}