인프런 커뮤니티 질문&답변

김봉섭님의 프로필 이미지
김봉섭

작성한 질문수

배달앱 클론코딩 [with React Native]

Redux, Config, EncryptedStorage, AsyncStorage의 차이

AsyncStorage 비동기로 인한 undefined 문제

작성

·

393

0

Flatlist 입니다.

const renderItem = {item} => {

return (

<TextInput

value={true || fixDescription[item.order].value}  onChangeText={onChangeText}/>

)

}

item과 fixDescription 둘다 useState 값이고 useEffect (()=>{AsyncStorage})를 통해서 값을 받아옵니다.

추측하기론, 컨솔 해보니 AsyncStorage가 비동기 방식이기 때문에, 처음에 빈칸으로 데이터가 떠서 {true || fixDescription[item.order].value} 이런식으로 데이터 없으면 null로 아예 안보이게 해줬는데 이렇게 하니 화면은 뜨는데 문제가 비동기처리 이후 데이터값이 들어와도 해당 TextInput의 value가 바뀌지 않다는 점이 문제입니다... 

 

console.log(fixDescription[data[0].order].value)

data는 flatlist의 아이템입니다. (flatlist의 item이니 [0]번째를 임의로 주었습니다.)

위의 컨솔 실행시 첫 빌드는 에러가 생기고, 저장해서 화면을 바꾸는( 핫리로드?) 시에는 컨솔이 작동하는 상황입니다.

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

true || ... 은 아무 의미 없는 코드입니다. 항상 true라서 뒤에 코드가 실행되지 않습니다.

value={fixDescription?.[item.order]?.value}

이런 식으로만 쓰면 됩니다.

김봉섭님의 프로필 이미지
김봉섭
질문자

그러네요... true || ...

감사합니다. 옵셔널 체이닝 이군요.

https://ko.javascript.info/optional-chaining

김봉섭님의 프로필 이미지
김봉섭

작성한 질문수

질문하기