prevState => ({
counter: prevState.counter + 1,
counter: prevState.counter + 1,
})
prevState.counter === 0
, будет создаваться как:{
counter: 0 + 1,
counter: 0 + 1, // результат этого выражения попадет в созданный объект
}
{ counter: 1 }
window._rutarget = [];
window._rutarget.push({ 'event': 'showOffer' });
window._rutarget = [];
const AdService = {
showOffer() {
window._rutarget.push({'event': 'showOffer'});
},
};
export default AdService;
class Example extends React.Component {
componentDidMount() {
const { fetchComments, productSlug } = this.props;
fetchProductCommentsBySlug(productSlug);
}
handleRemoveComment = id => {
this.props.removeProductCommentById(id);
};
handleSubmitComment = e => {
// ...
this.props.postProductComment(productComment);
};
render() {
const { comments, users } = this.props;
// ...
}
}
const mapStateToProps = state => ({
users: usersSelector(state),
comments: commentsSelector(state),
});
const mapDispatchToProps = {
fetchProductCommentsBySlug,
removeProductCommentById,
postProductComment,
};
connect(mapStateToProps, mapDispatchToProps)(Example);
{
product_id: "223af-b4535-54e21-31233-12a122-b453d",
quantity: 2.
}
const Hat = ({ match }) => {
// ...
useEffect(() => {
fetch(`https://foo0022.firebaseio.com//male/hat.json`)
.then(res => res.json())
.then(setArrProd);
}, [match.url]);
// ...
}
function promiseWrapper(url) {
return new Promise(resolve => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.send();
xhr.onload = () => {
resolve(xhr.response);
};
});
}
async function getData() {
const [res1] = await promiseWrapper(url1);
const [res2] = await promiseWrapper(url2);
return res1 + res2;
}
<Link to={`/${item.anchor}`}>
<Link to={'/' + item.anchor}>
npm i -S express
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.use('public', express.static('public'));
app.get('*', (req, res) => {
res.sendFile('public/index.html');
});
app.listen(port, () => {
console.log('Server listen at %s port', port);
});
app.use('public', express.static('public'));
подключается промежуточное ПО express.static, которое будет перехватывать все запросы за статическими файлами по пути: hostname:port/public/*
, например http://localhost:3000/public/style.css
, забирать их из папки /public
и возвращать клиенту. {this.state.cinemas.map(cinema => <ListItemCinema key={cinema.id} cinema={cinema} />)}
const ListItemCinema = ({ cinema }) => {
const { subway, shortTitle, labels, title, mail } = cinema.attributes;
/* some code */
return (
<div>
{/* some code */}
<ul>
{subway.map(station => <li key={station.name}>{station.name}</li>)}
</ul>
</div>
);
}