React Native/Error

[React Native] FlatList에 Mobx를 쓰면 발생하는 에러 (Out of bounds read: )

Juzero 2022. 1. 17. 02:24

1. 에러 상황

FlatList data에 mobx로 받아온 배열을 넣어주면 Out of bounds read 에러가 발생합니다. 

 

 

2. 에러 원인

이유를 찾아보다가 잘 정리된 글을 발견했습니다. 

 

FlatList는 배열에 저장된 값들을 읽어서 렌더링하는 역할을 하는데요. 위 에러는 FlatList가 읽을 수 없는 형태의 배열이 들어왔을 때 나타납니다. 

 

mobx에 저장된 배열은 일반 형태의 배열이 아니라고 합니다.

 

@observable users: Array<User> = [] 

//또는

users: Array<User> = observable([])

위 2개의 형태 중 하나로 정의되기 때문에 FlatList가 읽을 수 없다고 합니다. 

 

 

 

3. 해결 방법

mobx의 배열에 .slice()를 붙혀주면 됩니다. 

 

// 에러 발생
<FlatList 
	data={data}
    >
    
// 해결 방법
<FlatList
	data={data.slice()}
    >

 

.slice()는 원본 배열을 복사해서 반환해주는 함수입니다. 

 

.slice(1,4) 를 하면 배열의 1번요소부터 4번요소까지를 새로운 배열로 만들어서 반환해줍니다. 

괄호 안에 아무런 파라미터를 넣지 않으면 모든 배열요소를 그대로 복사해서 반환해주죠.

 

.slice()에 대한 더 자세한 설명은 여기를 참고해주세요!

 

 

slice()를 통해 observable 배열을 일반 배열로 바꾸어서 해결할 수 있었습니다. 

 

다만, 매번 slice()를 사용해서 FlatList를 렌더링하는 것은 성능에 별로 좋지 않다고 합니다.

다른 방법을 알고 계신다면 댓글로 알려주세요 :)