.section
, внутренний - .section__item
:class App extends React.Component {
state = {
cards: Array.from({ length: 7 }, (_, i) => ({
id: i + 1,
content: Math.pow(i, 3),
})),
}
addElem = () => {
this.setState(({ cards }) => ({
cards: [ ...cards, {
id: cards.length + 1,
content: Math.random().toString(16).slice(2),
} ],
}));
}
render() {
const { cards } = this.state;
const chunkLen = 3;
const chunks = Array.from(
{ length: Math.ceil(cards.length / chunkLen) },
(_, i) => cards.slice(i * chunkLen, (i + 1) * chunkLen)
);
return (
<div>
<button onClick={this.addElem}>add new element</button>
{chunks.map(n => (
<div className="section">
{n.map(m => (
<div className="section__item">
<a>#{m.id} {m.content}</a>
</div>
))}
</div>
))}
</div>
);
}
}
<img src={data.url} key={data.url} width="100%" alt="" />
this.handleAddNews.bind(this, arguments)
handleAddNews(newPost) {
handleAddNews = (newPost) => {
<Add newsadd={this.handleAddNews} />
items: [ 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven' ]
<TabContainer>Item {this.state.items[value]}</TabContainer>
type="text/babel"
вашему отдельному файлу при подключении.e.target.getAttribute('здесь имя атрибута')
, но, как уже заметили выше - вы сильно неправы добавляя name div'у. Замените на data-атрибут:onClick = e => {
console.log(e.target.dataset.name);
}
<div data-name="xxx" onClick={this.onClick}>hello, world!!</div>
<div onClick={() => console.log('xxx')}>hello, world!!</div>
- <main className={active ? 'move-to-left' : ''}>
+ <main>
- <div className="sidebar">
+ <div className={'sidebar ' + (active ? 'move-to-left' : '')}>
- <NavRight onClick={this.toggleActive} buttonClass={!active ? 'active' : ''} navClass="hidden-xs" />
+ <NavRight onClick={this.toggleActive} buttonClass={active ? 'active move-to-left' : ''} navClass="hidden-xs" />
+ body {
+ overflow: hidden;
+ }
.sidebar {
...
- z-index: 1;
- right: 0;
+ z-index: 3;
+ right: -400px;
+ transition: all .7s ease;
Имелось в виду, что контент тоже двигается при смещении sidebar, но не убегает полностью в левый угол, а остается по центрy оставшейся ширины
Как Вы думаете, как бы написал опытный реакт-разработчик...Я конечно таковым ни разу не являюсь, но всё-таки скажу пару слов.
проверки через тернарный оператор внутри render
?
Это окей - conditional rendering.Из метода render массив paths следует убрать. Может быть, его даже стоит сделать параметром компонента.render() { const paths = [
Следует сделать метод. Создавать при каждом вызове render новый обработчик - само по себе не очень здорово, ну и ещё этот код повторяется дважды.onClick={ () => {this.setState({isOpen: !this.state.isOpen})} }
this.props.history.listen(...
Если предполагается, что во время работы приложения экземпляр компонента будет создаваться несколько раз, то при удалении экземпляра надо снимать обработчик, иначе вывод в консоль задвоится (затроится, зачетверится,...). Сделать это несложно - listen возвращает функцию, снимающую обработчик, так что:componentWillMount() {
this.unlisten = this.props.history.listen(...
componentWillUnmount() {
this.unlisten();
<Link className="next_btn"...
<Link className="prev_btn"...
isOpen
и свойства объектов paths[currPathIndex +/- 1]
в качестве параметров. Это что-то вроде пагинации.
const currPathIndex = paths.findIndex(n => n.link === location.pathname);
const isPrev = currPathIndex !== 0;
const isNext = currPathIndex !== paths.length - 1;
const onClick = e =>
history.push(paths[currPathIndex + +e.target.dataset.step].link);
<button disabled={!isPrev} data-step={-1} onClick={onClick}>PREV</button>
<button disabled={!isNext} data-step={+1} onClick={onClick}>NEXT</button>
{isPrev && <NavLink to={paths[currPathIndex - 1].link}>PREV</NavLink>}
{isNext && <NavLink to={paths[currPathIndex + 1].link}>NEXT</NavLink>}
почему он может не перерисовывается когда данные поступают?
.length
где-то здесь:Object.keys(this.props.landingState) > 0