useCallback(fn, deps) эквивалентен useMemo(() => fn, deps). При каждом обновлении родительского компонента без этой обертки возвращалась бы новая ссылка на функцию и инициировала бы обновление дочернего компонента. С useCallback будет возвращаться старая ссылка, пока не изменится хотя бы один из элементов массива deps. this.props.history.push('/user');<Route exact path="/" component={Form} /><Route exact path="/" render={routeProps => <Form {...rotueProps} />} />const state = createStore();. Верните обратно.static getDerivedStateFromProps(props, state) {
if (props.message) {
return { message: props.message };
}
} export function init() {
return async (dispatch, getState) => {
const token = Cookies.get('token');
if (token) {
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
await dispatch(fetchUserData());
// some other code
} else {
// else case code
}
};
}const store = configureStore();
store.dispatch.(init());
const Root = () => (
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>
); - Я уже привык к шаблонам Blade - циклы, условия, особенно понравился пэйджинг(пагинация) - но если я решу выводить все это при помощи React - это мне придется отказаться от Blade или как?
То есть, я правильно понял, что если использовать React - про встроенный постраничный вывод можно забыть? :)
Что посоветуете?
почему нельзя просто все стили для блоков компонентов написать в одном файле и просто инлайново в index.html их подключить?
npm run buildКак преобразовать ее в класс, чтобы добавить state с параметром загрузки, который потом можно было бы получать в других частях приложения?
export const getResourcesAction = () => async (dispatch, getState) => {
const { resources } = getState();
if (isEmpty(resources)) {
try {
dispatch({ type: LOAD_RESOURCES_REQUEST });
const res = await fetch('/api/resources/all', { credentials: 'include' });
const data = await res.json();
dispatch({
type: LOAD_RESOURCES_SUCCEEDED,
payload: {
resources: data,
},
});
} catch (error) {
dispatch({
type: LOAD_RESOURCES_FAILED,
payload: {
error,
},
});
}
}
};
const initialState = {
isFetching: false,
data: [],
error: null,
};
export default function resourcesState(state = initialState, action) {
switch (action.type) {
case LOAD_RESOURCES_REQUEST:
return {
...state,
isFetching: true,
error: null,
};
case LOAD_RESOURCES_SUCCEEDED:
return {
data: action.payload.resources,
isFetching: false,
};
case LOAD_RESOURCES_FAILED:
return {
...state,
isFetching: false,
error: action.payload.error,
};
default:
return state;
}
} ReactDOM.render((
<Provider store={store}>
<Router>
<Main />
</Router>
</Provider>
), document.getElementById('root'));'/'. Если это так, то замените на '*'. renderSourceList = useMemo(() => {
if (newSources.length) {
// ...
}
return (
// ...
);
});{isFetching ? <Preloader /> : this.renderContent()}{isReady ? this.renderContent() : <Preloader />}'category-key-' - бессмысленно.catItem['category_name'] так же выглядят странно.const mapDispatchToProps = dispatch => ({
setProducts: products => dispatch(setProducts(products)),
setFilter: filter => dispatch(setFilter(filter)),
});const mapDispatchToProps = {
setProducts,
setFilter,
};