class Header extends Component {
state = {
headerClass: headerClass(),
headerSticky: headerSticky(),
};
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
};
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
};
handleScroll = e => {
this.setState({
headerSticky: headerSticky(),
});
};
render() {
...
}
}
import { applyContainerQuery } from 'react-container-query';
import { First, Second, Wrapper } from '../somePlace';
const myQuery = {
hasMinWidth: {
minWidth: 1024,
},
};
class MyComponent extends Component {
...
render() {
const {
containerQuery: { hasMinWidth },
} = this.props;
return (
<Wrapper>
{hasMinWidth ? <First /> : <Second />}
</Wrapper>
);
}
}
export default applyContainerQuery(MyComponent, myQuery);
GET '/api/v1/animals?page=1&limit=20sort=name&sortDirection=DESC&priceFrom=1000&priceTo=2000'
class UserForm extends React.Component{
state = {
login: '',
password: '',
};
handleChange = e => {
const { name, value } = e.target;
this.setState({
[name]: value,
});
};
handleSubmit = e => {
const { login, password } = this.state;
e.preventDefault();
alert(`
login: ${login}
password: ${password}
`);
};
render(){
const { login, password } = this.state;
return(
<div>
<form onSubmit={this.handleSubmit}>
<Fields
text="Введите логин"
type="text"
name="login"
value={login}
onChange={this.handleChange}
/>
<Fields
text="Введите пароль"
type="password"
value={password}
name="password"
onChange={this.handleChange}
/>
<MuiThemeProvider>
<RaiseButtin
label="Войти"
fullWidth={true}
style={style.button}
>
<input
type="submit"
style={style.exampleImageInput}
/>
</RaiseButtin>
</MuiThemeProvider>
</form>
</div>
);
}
}
import React, { Component } from 'react';
class List extends Component {
state = {
elements: [
{
id: 1,
title: 'First',
},
{
id: 2,
title: 'Second',
},
],
};
handleDeleteElement = id => {
this.setState(prevState => ({
elements: prevState.elements.filter(el => el.id != id);
}));
};
render() {
const { elements } = this.state;
return (
<ul>
{elements.map(el => (
<li
key={el.id}
onClick={() => { this.handleDeleteElement(el.id) }}
>
{el.title}
</li>
))}
</ul>
)
}
}
{items.map(item => (
<Item key={item.id} content={item} />
)}
module.exports = {
context: __dirname + "/public/js/",
entry: "./AuthForm",
output: {
filename: "bundle.js",
path: path.resolve(__dirname + "public/src")
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader",
options: {
presets: ['es2015', 'stage-0', 'react']
}
}]
}
]
}
};
npm install -S babel-preset-es2015 babel-preset-react babel-preset-stage-0
router.get('/', routeCache.cacheSeconds(20), async (req, res) => {
const posts = await models.Post.getPostsList({ limit: 10 });
res.json(posts);
});
router.get('/', async (req, res) => {
const posts = await models.Post.getPostsList({ limit: 10 });
res.render('index', { posts_list: posts });
});
const makeParams = params => ({
headers: {
Authorization: `Bearer ${cookies.get('frl_jwt_token')}`,
},
params: { ...params },
})
class ActionsReducers extends React.Component {
handleAddMan = () => {
this.props.addMan({ name: 'Альберт', family: 'Эйнштейн' });
};
render() {
const { men } = this.props;
return (
<Wrapper>
<List>
{men.map(man => <Man key={man.id} man={man} />)}
{!men.length && <Empty>No data in list.</Empty>}
</List>
<Button onClick={this.handleAddMan}>Add man</Button>
</Wrapper>
);
}
}
class ActionsReducers extends React.Component {
componentDidMount() {
this.props.addMan({ name: 'Альберт', family: 'Эйнштейн' });
}
render() {
const { men } = this.props;
return (
<Wrapper>
<List>
{men.map(man => <Man key={man.id} man={man} />)}
{!men.length && <Empty>No data in list.</Empty>}
</List>
</Wrapper>
);
}
}
const mapStateToProps = state => ({
userData: state.userData,
});
import { createSelector } from 'reselect';
export const userDataSeleror = state => state.userData;
export const userSelector = state => createSelector(
userDataSelector,
userData => userData.user,
);
export const isUserDataLoadingSelector = state => createSelector(
userDataSelector,
userData => userData.isLoading,
);
export const isUserDataErrorSelector = state => createSelector(
userDataSelector,
userData => userData.isError,
);
import { fetchUserData } from './somePlace';
import Profile from './Profile';
import {
userSelector,
isUserDataLoadingSelector,
isUserDataErrorSelector,
} from './selectors';
const mapStateToProps = state => ({
user: userSelector(state),
isLoading: isUserDataLoadingSelector(state),
isError: isUserDataErrorSelector(state),
});
const mapDispatchToProps = {
fetchUserData,
};
export default connect(mapStateToProps, mapDispatchToProps)(Profile);
class Profile extends Component {
componentDidMount() {
this.props.fetchUserData();
}
render() {
const { user, isLoading, isError } = this.props;
return (
...
);
}
}
function Block({
children,
isLoading,
isError,
isEmpty,
emptyText,
fetch,
}) {
const showPreloader = isLoading && !isError;
const allDataIsReady = !isLoading && !isError;
const showEmptyText = allDataIsReady && isEmpty && emptyText;
return (
<Wrapper>
{showPreloader && <Preloader />}
{isError && <TryAgain fetch={fetch} />}
{showEmptyText && <Empty>{emptyText}</Empty>}
{allDataIsReady && children}
</Wrapper>
);
}
render() {
const { isLoading, isError, orderList } = this.props;
return (
<Block
isLoading={isLoading}
isError={isError}
isEmpty={!ordersList.length}
fetch={this.fetchOrdersList}
emptyText="You don't have any orders."
>
{ordersList.map(order => <Order key={order.id} order={order} />}
</Block>
)
}
export const routes = [
{
component: Home,
path: '/',
},
{
component: Roster,
path: '/roster',
},
{
component: Schedule,
path: '/schedule',
},
];
export default function SwitchWithRoutes({ routes }) {
return (
<Switch>
{routes.map((route, i) => (
<Route
key={i}
exact={route.path === '/'}
path={route.path}
component={route.component}
/>
)}
</Switch>
);
}
<Route path="/more/:id" component={More}/>
<Link to={`more/${this.props.itemId}`} className="descr">подробнее</Link>
export default function More(props){
const { id } = props.match.params;
const item =props.items[id];
const { id, title, descr, img, price } = item;
return(
<div className="more__info">
...
</div>
);
}
localhost:3000/more_id1
localhost:3000/more/1
class App extends Component {
state = {
activeItemId: -1,
};
selectItem = id => {
this.setState({
activeItemId: id,
});
};
render() {
const { items } = this.props;
const { activeItemId } = this.state;
const activeItem = items.find(item => item.id === selectedItemId);
return (
<Wrapper>
<More item={activeItem} />
<Items
items={items}
onSelectItemCalback={this.selectItem}
/>
</Wrapper>
);
}
}
const links = [
{
label: 'Home',
path: '/',
},
{
label: 'About',
path: '/about',
},
{
label: 'Shop',
path: '/shop',
},
{
label: 'Home',
path: '/',
},
{
label: 'Contact',
path: '/contact',
},
];
return (
<Wrapper>
{links.map((link, i) => (
<Link key={i} to={link.path}>
{link.label}
</Link>
))}
</Wrapper>
);
this.state.href[0] // первый элемент массива
it('test openModal', () => {
expect(actions.openModal({ name: 'Some name'}, '1')).toEqual({
type: types.OPEN_MODAL,
payload: {
id: '1',
initData: {
name: 'Some name',
},
},
});
});
{
type: types.OPEN_MODAL, // тут естественно значение
payload: {
id: undefined,
initData: {
id: '1',
initData: {
name: 'Some name',
},
},
},
}
import { applyContainerQuery } from 'react-container-query';
import { Hello, Boy, Wrapper } from '../somePlace';
const myQuery = {
hasMinWidth: {
minWidth: 1024,
},
};
class MyComponent extends Component {
...
render() {
const {
containerQuery: { hasMinWidth },
} = this.props;
return (
<Wrapper>
{hasMinWidth ? <Hello /> : <Boy />}
</Wrapper>
);
}
}
export default applyContainerQuery(MyComponent, myQuery);
export default function(state = initialState, action) {
if (action.type === 'DIALOG_SELECTED') {
return state;
}
if (action.type === 'DIALOG_DELETE') {
const newState = [...state];
newState.shift();
return newState;
}
else {
return state;
}
}
const mapStateToProps = state => ({
dialogs: state.dialogs,
});
const mapDispatchToProps = {
selectDialog: actions.selectDialog,
deleteDialog: actions.deleteDialog,
};
export default connect(mapStateToProps, mapDispatchToProps)(Sidebar);
class Sidebar extends Component {
selectDialog = () => {
this.props.selectDialog();
};
deleteDialog = () => {
this.props.deleteDialog();
};
render() {
console.log('рендер сайдбара');
return (
<div className='sidebar'>
<div className='sidebar__content'>
<div className='sidebar__head'></div>
<SidebarChatGroup chatName='Общий'>
<button onClick={this.selectDialog}>Выбрать</button>
<button onClick={this.deleteDialog}>удалить</button>
</SidebarChatGroup>
</div>
<div className='sidebar__bg'></div>
</div>
)
}
}
this.setState({
columnId,
}, this.fetchData);
componentDidUpdate(_, prevState) {
if (prevState.columnId !== this.state.columnId) {
this.fetchData();
}
}