react-native-naver-map icon indicating copy to clipboard operation
react-native-naver-map copied to clipboard

[Android] Marker 여러개 생성 시 RNNaverMapFeature의 feature로 Null이 들어가는 현상.

Open bambbamnenim opened this issue 4 years ago • 1 comments

Version of react-native-naver-map libraries

0.0.58

Version of react-native

0.63.4

Platforms you faced the error (IOS or Android or both?)

Android

Expected behavior

Marker들이 정상적으로 render돼야 합니다.

Actual behavior

iOS에서는 문제가 없는데 Android에서 NaverMapView의 children으로 여러개의 Marker를 넣어줬을때 Null값이 들어가는 경우가 있는 것 같습니다.

대략적으로 코드는 다음과 같습니다.

const testPage = () => {
  const [condition, setCondition] = useState(false);
  const [markers, setMarkers] = useState([]);
  
 //데이터를 패치해 마커를 넣어줍니다.
  const fetchDataAndSetMarkers = async () => {
    var fechtedData = await someHowFetching(); //
    serMarkers(fetchedData.map(()=>{
      return <Marker .../>
    })
  }

  useEffect(()=>{
    fetchDataAndSetMarkers();
  }, [condition])
  return (
    <view>
      //......something else
      <NaverMapView>
        {markers}
      <NaverMapView>
      <Button onPress={() =>{setCondition(!condition)}} />
    </View>
  )
}

우선 로컬에서 feature에 null 처리를 다음과 같이 해주어서 에러 발생은 막았지만 뭔가 정상 작동이 안되는것 같네요.

//in RNNaverMapFeature
    public void addToMap(RNNaverMapView map) {
       //add시 feature가 null이면 추가 안함.
        if(feature != null) {
          feature.setMap(map.getMap());
        }
    }

    public void removeFromMap() {
       //remove시 feature가 null이면 패스안함.
        if(feature != null) {
          feature.setMap(null);
        }
        feature = null;
    }
//in ClickableRNNaverMapFeature
    @Override
    public void addToMap(RNNaverMapView map) {
        super.addToMap(map);
        //feature가 null이면 리스너 등록 안함.
        if(feature != null) {
          feature.setOnClickListener(this);
        }
    }

우선은 iOS에선 발생하지 않는 버그라 새로 이슈를 등록해 봅니다. 혹시 RN단에서 핸들이 가능한 이슈거나 android native에서 수정이 가능한 문제면 도움이 필요합니다 ㅜㅜ

Tested environment (Emulator? Real Device?)

안드로이드 에뮬레이터 (Pixel 3), 실기기(Galaxy Note 20) 모두 동일한 현상이 생깁니다.

Screen Shot

marker_error

bambbamnenim avatar Mar 04 '21 10:03 bambbamnenim

#63 이슈와 같은 원인같은데 재현이 안되네요;; 재현을 위해 임의의 마커를 토글로 표시해보았습니다.

show && Array.from({length: 250}).map(() => 
	<Marker coordinate={{
		latitude: P0.latitude + Math.random() / 100, 
		longitude: P0.longitude + Math.random() / 100
	}}/>)

의심이 가는 부분은 마커가 맵뷰에서 제거될떄 feature 또한 null로 세팅하는데 어디선가 마커뷰가 재사용되어 feature에 접근할 때 같네요. 일단 제거될때 feature를 null로 세팅하는 부분을 임시로 없애고 추후 메모리릭이 생기는지 지켜봐야할것 같습니다.

QuadFlask avatar Mar 07 '21 09:03 QuadFlask