Вам нужно передать requestedProduct
в качестве зависимости для использованияEffect, чтобы ваши подписки получили обновленное значение.
useEffect(() => {
addSearchWidget();
}, [requestedProduct]);
или вы можете разделить создание и подписку на отдельные эффекты
export const SearchWidget = memo(() => {
. . .
const requestedProduct = useSelector(state => state.coverage.requestedProduct);
. . .
let search = null;
useEffect(() => {
search = new Search({
view: mapView,
sources: [
locatorSearchResource
],
container: searchContainer.current
});
}, [])
useEffect(() => {
search.on('select-result', (data) => {
dispatch(actions.registerFoundLocation({
id: generateUniqueId(),
x: attr.x,
y: attr.y,
product: requestedProduct
}));
});
}, [requestedProduct]);
return <div ref={searchContainer} />;
});
PS Также вы должны очистить подписки при создании новой подписки или при отключении