R1ZEN / react-yandex-maps

Yandex.Maps API bindings for React (fork https://github.com/gribnoysup/react-yandex-maps)
https://pbe-react-yandex-maps.vercel.app
MIT License
120 stars 20 forks source link

Поддержка React 18 #16

Closed kumold closed 2 years ago

kumold commented 2 years ago

Будет ли библиотека обновляться до 18го реакта?

R1ZEN commented 2 years ago

Биндиги уже работают на React18 https://codesandbox.io/s/pbe-react-yandex-maps-react-18-xe2o98?file=/src/index.js

kumold commented 2 years ago

В версии с typescript ругает что у YMaps нет опции children.

https://codesandbox.io/s/typescript-forked-q2lt5w?file=/src/index.tsx

kumold commented 2 years ago

У себя добавил children для проверки, но отваливается уже в других местах.

kumold commented 2 years ago

Собрал примерный проект с 18 реактом. https://github.com/kumold/react-yandex-maps-example

Там можно посмотреть, как отваливается карта.

R1ZEN commented 2 years ago

@kumold карта работает, просто контейнер должен иметь размеры) https://codesandbox.io/s/pbe-react-yandex-maps-placemark-y0lq62?file=/src/App.tsx

kumold commented 2 years ago

Благодарю за быстрые ответы. Отваливается оказывается при StrictMode. Т.е. если обернуть App в React.StrictMode.

kumold commented 2 years ago

Хм... в примере от вас работает с StrictMode, но в моем примерном репозиторие отваливается.

turtlecrab commented 2 years ago

То же самое - проекты со StrictMode (кое-как) работают на codesandbox, но не работают локально(а также на vercel).

https://codesandbox.io/s/agitated-khayyam-lnstj8?file=/src/App.ts Здесь можно увидеть баг с двойным отображением маркера - нажимаем на кнопку в строгом режиме - видим два маркера, без строгого режима - ожидаемо один.

При этом этот же проект запущенный локально вообще не работает:

Uncaught TypeError: t is not a constructor
    at Function.mountObject (BaseGeoObject.tsx:61:1)
    at q.componentDidMount (BaseGeoObject.tsx:34:1)
    ...

Карта без маркера ошибку не выбрасывает, только с маркером. Хак, который мне удалось придумать, чтобы все-таки заставить маркер появиться - выводить его по setTimeout на уже загрузившуюся карту:

const [showPlacemark, setShowPlacemark] = useState(false)

useEffect(() => {
  setTimeout(() => setShowPlacemark(true), 2000)
}, [])

...

{showPlacemark && (
  <Placemark geometry={[lat + offset[0], lon + offset[1]]} />
)}

Причем с маленькой задержкой тоже ошибка. Не знаю, насколько эта информация будет полезна, но решил добавить :)

kumold commented 2 years ago

В версии react-yandex-maps все как бы работает, но рисует две карты. А в версии @pbe/react-yandex-maps все как вы описали.

То же самое - проекты со StrictMode (кое-как) работают на codesandbox, но не работают локально(а также на vercel).

https://codesandbox.io/s/agitated-khayyam-lnstj8?file=/src/App.ts Здесь можно увидеть баг с двойным отображением маркера - нажимаем на кнопку в строгом режиме - видим два маркера, без строгого режима - ожидаемо один.

При этом этот же проект запущенный локально вообще не работает:

Uncaught TypeError: t is not a constructor
    at Function.mountObject (BaseGeoObject.tsx:61:1)
    at q.componentDidMount (BaseGeoObject.tsx:34:1)
    ...

Карта без маркера ошибку не выбрасывает, только с маркером. Хак, который мне удалось придумать, чтобы все-таки заставить маркер появиться - выводить его по setTimeout на уже загрузившуюся карту:

const [showPlacemark, setShowPlacemark] = useState(false)

useEffect(() => {
  setTimeout(() => setShowPlacemark(true), 2000)
}, [])

...

{showPlacemark && (
  <Placemark geometry={[lat + offset[0], lon + offset[1]]} />
)}

Причем с маленькой задержкой тоже ошибка. Не знаю, насколько эта информация будет полезна, но решил добавить :)

R1ZEN commented 2 years ago

@kumold @turtlecrab пофикшено, сейчас должно и на локалке работать) https://codesandbox.io/s/nostalgic-lehmann-f0o63o?file=/src/App.tsx

turtlecrab commented 2 years ago

У меня работает! Спасибо!