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,
};