const groupedUsers = users && users.reduce((acc, n) => {
acc[new Date(n.dob).getMonth()].users.push(n);
return acc;
}, [...Array(12)].map((n, i) => ({
month: new Date(0, i).toLocaleString('ru-RU', { month: 'long' }),
users: [],
})));
{groupedUsers && groupedUsers.map(n => (
<div key={n.month}>
<h2>{n.month}</h2>
{n.users.map(user => (
<div key={user.id}>
<h3>user #{user.id}</h3>
<div>данные пользователя...</div>
</div>
))}
</div>
))}
{this.state.ad.map(n => (
<div key={n.id}>
<h2>{n.title}</h2>
<div>{n.images.map(src => <img src={src} />)}</div>
</div>
))}
как лучше реализовать функционал, чтобы иконка была одна, а в нужных компонентах мы докидывали цвет?
почему не удаляется item, а добавляется?
slice(0, -1)
) плюс полная копия (slice(0)
).deleteItem = id => {
this.setState(({ todoData }) => ({
todoData: todoData.filter(n => n.id !== id),
}));
}
const List = ({ items }) => {
const [ active, setActive ] = React.useState(null);
function onClick(e) {
const index = +e.target.dataset.index;
setActive(active === index ? null : index);
}
return (
<ul>
{items.map((n, i) => (
<li key={n.id}>
<span data-index={i} onClick={onClick}>{n.id}</span>
{active === i ? <div>{n.link}</div> : null}
</li>
))}
</ul>
)
};
const List = ({ items }) => {
const [ active, setActive ] = React.useState({});
const onClick = ({ target: { dataset: { index } } }) =>
setActive(active => ({ ...active, [index]: !active[index] }));
return (
<ul>
{items.map((n, i) => (
<li key={n.id}>
<span data-index={i} onClick={onClick}>{n.id}</span>
{active[i] ? <div>{n.link}</div> : null}
</li>
))}
</ul>
)
};
index.js
меняете value={bookStoreService} data={data}
на value={{ bookStoreService, data }}
, а в with-bookstore-service.js
меняете (bookStoreService, data)
на ({ bookStoreService, data })
. toggleDetails = (e) => {
e.preventDefault();
this.setState({ details: !this.state.details });
}
state = {
opened: null,
}
toggle = ({ target: { dataset: { name } } }) => {
this.setState(({ opened }) => ({
opened: opened === name ? null : name,
}));
}
state = {
active: 0,
}
nextSlideHandler = ({ target: { dataset: { step } } }) => {
const len = this.props.images.length;
this.setState(({ active }) => ({
active: (active + len + +step) % len,
}));
}
<button data-step="-1" onClick={this.nextSlideHandler} className="prev">prev</button>
<button data-step="+1" onClick={this.nextSlideHandler} className="next">next</button>
<img src={this.props.images[this.state.active]} />
const [ active, setActive ] = useState(null);
const item = test.title[active];
const onClick = e => setActive(e.target.dataset.id);
{Object.keys(test.title).map(n =>
<button key={n} data-id={n} onClick={onClick}>{n}</button>
)}
{item && <div>{item.title} ---- {item.category}</div>}
onClick = ({ target: { dataset: { shift } } }) => {
this.setState(() => ({ shift }), this.filter);
}
this.setState({ comments: comments.filter( (comment, i) => { return i !== index; }, () => localStorage.setItem("state", JSON.stringify(this.state)) ) });
Я реализовал очень простые вкладки на React.js.
на Redux не работают