useState의 무거운 작업에 대한 초기화 #27
yunseorim1116
started this conversation in
Ideas
Replies: 3 comments 6 replies
-
import React, { useState } from 'react';
// 무거운 작업 함수
const heavyWork = () => {
console.log('엄청 무거운 작업!!!');
return ['홍길동', '김땡떙'];
};
function App() {
const [names, setNames] = useState(heavyWork()); // 초기 상태를 heavyWork()의 결과로 설정
const [input, setInput] = useState('');
// 입력 변경 핸들러
const handleInputChange = (e) => {
setInput(e.target.value);
};
// 업로드 핸들러
const handleUpload = () => {
setNames((prevState) => {
console.log('이전 state: ', prevState);
return [input, ...prevState]; // input을 names 배열의 앞에 추가
});
setInput(''); // 입력 필드 초기화
};
return (
<div>
<input type="text" value={input} onChange={handleInputChange} />
<button onClick={handleUpload}>Upload</button>
<ul>
{names.map((name, index) => (
<li key={index}>{name}</li> // 이름 리스트 렌더링
))}
</ul>
</div>
);
}
export default App; |
Beta Was this translation helpful? Give feedback.
1 reply
-
이렇게 변경해주면 ?import React, { useState } from 'react';
// 무거운 작업 함수
const heavyWork = () => {
console.log('엄청 무거운 작업!!!');
return ['홍길동', '김땡떙'];
};
function App() {
_**const [names, setNames] = useState(()=> heavyWork());**_
const [input, setInput] = useState('');
// 입력 변경 핸들러
const handleInputChange = (e) => {
setInput(e.target.value);
};
// 업로드 핸들러
const handleUpload = () => {
setNames((prevState) => {
console.log('이전 state: ', prevState);
return [input, ...prevState]; // input을 names 배열의 앞에 추가
});
setInput(''); // 입력 필드 초기화
};
return (
<div>
<input type="text" value={input} onChange={handleInputChange} />
<button onClick={handleUpload}>Upload</button>
<ul>
{names.map((name, index) => (
<li key={index}>{name}</li> // 이름 리스트 렌더링
))}
</ul>
</div>
);
}
export default App; |
Beta Was this translation helpful? Give feedback.
3 replies
-
위와 같은 상황이 발생하는 이유를 추가적으로 설명하자면 자바스크립트의 함수 실행 순서에 의해서 발생하는 것 같습니다! 첫 번째 방식const [names, setNames] = useState(heavyWork()); 이 코드가 실행되는 순서를 살펴보면
즉, React의 useState가 호출되기 전에 이미 두 번째 방식const [names, setNames] = useState(() => heavyWork());
|
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
useState 무거운 작업에 대한 초기화
Beta Was this translation helpful? Give feedback.
All reactions