{ имя валюты, относительная стоимость }
.The useRef() Hook isn’t just for DOM refs. The “ref” object is a generic container whose current property is mutable and can hold any value, similar to an instance property on a class.
this.setState(({ items }) => ({
items: items.map((n, i) => ({ ...n, id: i })),
}));
state = {
items: this.props.items.map((n, i) => ({ ...n, id: i })),
}
export default ({ filter, checked, onChange, children }) => (
<div>
<label>
<input
type="checkbox"
name={filter}
onChange={() => onChange(filter)}
checked={checked}
/>
{children}
</label>
</div>
);
return { ...user, isFollowed: !this.isFollowed };
const chunks = (arr, chunkSize) => Array.from(
{ length: Math.ceil(items.length / chunkSize) },
(n, i) => items.slice(i * chunkSize, (i + 1) * chunkSize)
);
const Card = props => (
<div className="style-review__slide-row">
<a className="style-card style-review__style-card" href="#">
<div className="style-card__overlay">
<div className="style-card__title">{props.title}</div>
<div className="style-card__category">
{props.category}
</div>
</div>
</a>
</div>
);
const chunkedItems = chunks(items, 3);
<Swiper>
{chunkedItems.map(cardItems => (
<SwiperSlide className="swiper-slide style-review__slide">
{cardItems.map(n => <Card {...n} />)}
</SwiperSlide>
))}
</Swiper>
state = {
markers: [],
maxMarkersNum: 666,
}
onClick = ({ latlng }) => {
this.setState(({ markers, maxMarkersNum }) => ({
markers: markers.length >= maxMarkersNum
? []
: [ ...markers, latlng ],
}));
}
<Map onClick={this.onClick}>
{this.state.markers.map(n => <Marker position={n} />)}
</Map>
setValue(value === e.target.value);
value ===
.setValue(Math.min(max, Math.max(min, e.target.value)));
Хотел реализовать тоже самое с двойным range слайдером и оказалось несколько сложнее.
{cats.map((cat, index) => (
<li key={cat.description} className="catsItem">
<img src={catsImg[index]} alt=""/>
...
() =>
перед openLightboxOnSlide(key)
(кстати, а какого хрена переменная, содержащая индекс, названа key?).null
, или -1
) - это будет означать, что показывать ничего не надо:const [ lightIndex, setLightIndex ] = useState(null);
<img onClick={() => setLightIndex(key)} />
<ReactBnbGallery
photos={photos}
show={lightIndex !== null}
activePhotoIndex={lightIndex}
onClose={() => setLightIndex(null)}
/>
ref={ref}
элементу, который собираетесь скрывать.<div className="mainWindow">
{this.props.children}
</div>
function Modal(props) {
const root = useRef();
useEffect(() => {
const onClick = e => root.current.contains(e.target) || закрытьОкно();
document.addEventListener('click', onClick);
return () => document.removeEventListener('click', onClick);
}, []);
return (
<div ref={root}>
...
</div>
);
}
function Modal(props) {
return (
<div
className="modal-overlay"
onClick={e => (e.currentTarget === e.target) && закрытьОкно()}
>
...
</div>
);
}
.modal-overlay {
position: absolute;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
}
const rows = [items.map(item => item)];
И как быть в случае подобных вложенностей, когда мне от объекта user нужен только его username?
Все делаю по образцу из официальной документации к Material
valueGetter: params => params.row.user.username
. sex: bool, fired: bool
sex: null,
fired: false
console.log(this.state.fired.checked);
changeInputHandler = ({ target: t }) => {
this.setState(() => ({
[t.name]: t.type === 'checkbox' ? t.checked : t.value,
}));
}