<Switch>
<Route path={"/"} exact render={() => <div>'100'</div>} />
<Route path={"/male/hat"} exact component={ProductsList} />
<Route path={"/male/hat/:to"} exact component={ProductDetails} />
</Switch>
const ProductDetails = ({ match }) => {
const { to } = match.params;
const [state, setState] = useState({ isFetching: true, hat: null });
const { isFetching, product } = state;
useEffect(() => {
(async () => {
await fetch(`https://foo0022.firebaseio.com//male/hat.json`)
.then(res => res.json())
.then(data => {
const product = data.find(item => item.to === to);
setState({ isFetching: false, product });
});
})();
}, []);
if (isFetching) return <div>...Loading</div>;
if (!product) return <div>404: Product not found</div>;
return (
<div>
<h1>{product.title}</h1>
<h2>{product.price}</h2>
</div>
);
}
const ProductsList = () => {
const [state, setState] = useState({ isFetching: true, products: [] });
const { isFetching, products } = state;
useEffect(() => {
(async () => {
await fetch(`https://foo0022.firebaseio.com//male/hat.json`)
.then(res => res.json())
.then(data => setState({ isFetching: false, products: data });
})();
}, []);
if (isFetching) return <div>...Loading</div>;
return (
<ul>
{products.map(({ to, title }) => (
<li key={to}>
<Link to={`/male/hat/${to}`}>{title}</Link>
</li>
))}
</ul>
);
};
axios.get('https://cors-anywhere.herokuapp.com/https://some-cors-not-allowed-api.com');
function fetchProductBySlug(slug) {
return async dispatch => {
dispatch({ type: FETCH_PRODUCT_BY_SLUG });
try {
const { data } = await axios.get(`/products/${slug}`);
dispatch({ type: FETCH_PRODUCT_BY_SLUG_SUCCEEDED, payload: data });
} catch (err) {
dispatch({ type: FETCH_PRODUCT_BY_SLUG_FAILED, payload: mapAxiosError(err) });
}
};
}
export default function product(state = initialState, action) {
switch(action.type) {
case FETCH_PRODUCT_BY_SLUG:
return {
...state,
isFetching: true,
error: null,
};
case FETCH_PRODUCT_BY_SLUG_SUCCEEDED:
return {
...state,
product: action.payload,
isFetching: false,
error: null,
};
case FETCH_PRODUCT_BY_SLUG_FAILED:
return {
...state,
isFetching: false,
error: action.payload,
};
default:
return state;
}
}
const myCookieValue = Cookie.get(MY_COOKIE_KEY);
Я понимаю, что я должен на сервере задать 'Access-Control-Allow-Origin':'*', но не хочу ejectить.
Для получения access_token необходимо выполнить запрос с Вашего сервера на https: //oauth.vk.com/access_token, передав следующие параметры:
Родитель выполняется 1 раз.
Если использовать PureComponent то 2 раза. Но всё равно раз лишний.
removeItem(index) {
const newItems = [...this.state.items];
newItems.splice(index, 1);
this.setState({ items: newItems });
}
removeItem(id) {
this.setState({
items: this.state.items.filter(item => item.id !== id),
});
}
<button onClick={() => this.removeItem(item.id)} class="nhc-btn">
<div key={item.id} class="note-container">
По техническим причинам на стороне бэкенда нету возможности добавить во второй массив значение type.
array2.forEach(el2 => {
el2.type = array1.find(el1 => el1.idSite === el2.idSite);
});
const array1Clone = array1.slice(0);
array2.forEach(el2 => {
const index = array1Clone.findIndex(el1 => el1.idSite === el2.idSite);
if (index > -1) {
el2.type = array1Clone.splice(index,1)[0].type;
}
});
Сейчас я пишу пользовательский хук, в который при вызове передавался бы селектор ID,
Мне нужно внутри одного компонента получить значение высоты другого компонента. Как это сделать?
Но столкнулся с проблемой, что в кастомных компонентах атрибут id рассматривается как prop