• Как быстро засыпать чтобы было больше времени на изучение программирования?

    Zoominger
    @Zoominger
    System Integrator
    Б-же, до чего же у вас много свободного времени.

    Покупаете две гантели киллограмм по 10 и размахиваете ими часа за два до сна. Потом отжимаетесь. Потом приседаете. Потом повторяете всё сначала, пока сердце из ушей не полезет. "Хватит" - это когда насквозь промокли труханы, футболка, а на трениках разлилось большое потное пятно.

    После этого будете засыпать за 5 минут. Повторять через день. Проверено, работает. Проблемы с засыпанием возникают из-за малоподвижного образа жизни. Спорим, у вас жирок?

    Альтернатива - литр пива за 1,5 часа до сна или две плюшки [ЗАБЛОКИРОВАНО РКН] за час до сна.

    И кста, "больше времени на изучение" никогда не равно "будет эффективнее".
    Ответ написан
    4 комментария
  • Как отфильтровать по инпутам-чекбоксам массив элементов с помощью метода filter?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не понятно, что именно вы хотите. То есть какую проблему вы решаете.
    Ловить события можно примерно так:
    https://jsfiddle.net/ayc2ekj0/
    Ответ написан
    Комментировать
  • Как отфильтровать по инпутам-чекбоксам массив элементов с помощью метода filter?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const checked = Array.from(document.querySelectorAll('.btn:checked'), n => n.value);
    const filtered = arr.filter(n => checked.includes(n));
    Ответ написан
    5 комментариев
  • Как отфильтровать по инпутам-чекбоксам массив элементов с помощью метода filter?

    @dimoff66
    Кратко о себе: Я есть
    В вашем конкретном случае сам массив фильтровать вроде и незачем, раз его значения в точности совпадают со значениями инпутов, просто делаете селекторный запрос

    var arr = [
    	{ country: 'Italy', capital: "rome"},
      { country: 'usa', capital: 'Washington'},
      { country: 'france', capital: 'Paris'},
      { country: 'spain', capital: 'Madrid'},
    ]
    
    const onClick = () => {
    	const countriesChecked = Array.from(document.querySelectorAll('.btn') )
        .filter(item => item.checked)
        .map(item => item.value)
        
      const cities = arr
      	.filter(elem => countriesChecked.includes(elem.country))
        .map(elem => elem.capital)  
        
        alert(cities)
    }
    
    [...document.querySelectorAll('.btn')].forEach(item => {
    	item.addEventListener('click', onClick)
    })
    Ответ написан
    7 комментариев
  • Почему не работает код вкладки (accordion)?

    hzzzzl
    @hzzzzl
    просто реакт не подключен на jsfiddle
    https://jsfiddle.net/s2ze9pfk/
    Ответ написан
    Комментировать
  • Какая разница между объектами (или набором обьектов) и ассоциативным массивом?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В JavaScript разницы нету. А вообще обычно разница в том, что объект может иметь методы, которые можно вызывать в контексте объекта. В том числе конструктор. В JavaScript, соответственно, есть прототипы. Но ирония в том, что массив в JavaScript - это тоже объект. Вообще этот язык исторически тянет кучу дикости с древних времен, а нам с этим жить. Хотя если строго формально, то ассоциативных массивов в JS нет.
    Ответ написан
    3 комментария
  • Какая разница между объектами (или набором обьектов) и ассоциативным массивом?

    @andreysuha
    Что то знаю
    Не совсем понятно что Вы имеете ввиду. В js нету ассоциативных массивов как раз их место занимают объекты.
    Ответ написан
    Комментировать
  • Как расшифровать эту строку в коде?

    IgorPI
    @IgorPI
    document - текущий документ
    getElementById() - метод получения элемента используя id
    onchange  - свойство элемента для обработчика события
    function (event){} - анонимная функция (обработчик события)
    
    event - локальная переменная в контексте анонимной функции
    target - таргет он и в африке таргет (целевой элемент, где происходит туса)
    parentNode - родительская нода
    childNodes[1] - у родителя есть дети
    data - у детей есть данные
    slice(1) - отхренашить кусочек
     
    currentKey - отхренашеный кусочек
    Ответ написан
    Комментировать
  • Как бы выглядел этот код без хуков (hooks) и с компонентами класса, а не с функциональными компонентами?

    pterodaktil
    @pterodaktil
    js developer
    class Slider extends Component {
      state = {
        active: 0
      };
    
      componentDidMount() {
        const { items } = this.props;
    
        this.timeout = setTimeout(
          () => this.updateActive(this.state.active, 1, items.length),
          5000
        );
      }
      componentDidUpdate(prevProps, prevState) {
        const { items } = this.props;
        const { active } = this.state;
    
        if (
          prevState.active !== active ||
          prevProps.items.length !== items.length
        ) {
          clearTimeout(this.timeout);
          this.timeout = setTimeout(
            () => this.updateActive(active, 1, items.length),
            5000
          );
        }
      }
      componentWillUnmount() {
        clearInterval(this.timeout);
      }
    
      updateActive = (active, step, length) => {
        this.setState({
          active: step ? (active + step + length) % length : active
        });
      };
      next = e =>
        this.setState({
          active: this.updateActive(
            this.state.active,
            +e.target.dataset.step,
            this.props.items.length
          )
        });
      goTo = e => this.updateActive(+e.target.dataset.index);
    
      render() {
        const { active } = this.state;
        const { items } = this.props;
    
        const { length, [active]: slide } = items;
    
        return (
          <div>
            <div className="slideshow-container">
              <div className="mySlides fade">
                <div className="numbertext">
                  {active + 1} / {length}
                </div>
                <img src={slide.img} />
                <div className="text">{slide.title}</div>
              </div>
              <a className="prev" onClick={this.next} data-step={-1}>
                &#10094;
              </a>
              <a className="next" onClick={this.next} data-step={+1}>
                &#10095;
              </a>
            </div>
            <div className="dots">
              {items.map((n, i) => (
                <span
                  key={n.id}
                  className={`dot ${i === active ? "active" : ""}`}
                  onClick={this.goTo}
                  data-index={i}
                />
              ))}
            </div>
          </div>
        );
      }
    }
    Ответ написан
    8 комментариев
  • Как реализовать переключение вкладок с использованием классов вместо функций?

    0xD34F
    @0xD34F Куратор тега React
    class TabContent extends React.Component {
      render() {
        const { title, content } = this.props;
    
        return (
          <div className="tabcontent">
            <h3>{title}</h3>
            <p>{content}</p> 
          </div>
        );
      }
    }
    
    class Tabs extends React.Component {
      state = {
        active: null,
      }
    
      openTab = e => this.setState({
        active: +e.target.dataset.index,
      });
    
      render() {
        const { items } = this.props;
        const { active } = this.state;
    
        return (
          <div>
            <div className="tab">
              {items.map((n, i) => (
                <button
                  className={`tablinks ${i === active ? 'active' : ''}`}
                  onClick={this.openTab}
                  data-index={i}
                >{n.title}</button>
              ))}
            </div>
            {items[active] && <TabContent {...items[active]} />}
          </div>
        );
      }
    }
    Ответ написан
    Комментировать
  • Как переделать в React код переключение класса как в примере?

    @i1yas
    Вам нужно хранить состоние данного элемента, вопрос где. Компонент может принимать на вход пропс и коллбек onClick, либо компонент может внутри себя рулить состоянием и обрабаывать нажатие. Для первого вам понадобится либо родительский компонент с состоянием и функциями обработчиками, либо отдельное хранилище состояния. Вариант с внутренним хранением состояния проще (но не всегда подходит):
    const Element = props => {
      const [styleEnabled, setStyle] = useState(false);
    
      return (
        <div
          className={`myDIV ${styleEnabled ? "mystyle" : ""}`}
          onClick={e => setStyle(!styleEnabled)}
        >
          Toggle me
        </div>
      );
    };

    Ссылка на песочницу
    Ответ написан
    2 комментария
  • Как переделать в React код переключение класса как в примере?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Необходимая теория:
    Состояние и жизненный цикл
    Использование хука состояния
    Стилизация и CSS
    Обработка событий
    Вам бы я так же рекомендовал пройти tutorial.

    Декомпозиция вашей задачи:
    1. Завести ключ состояния типа boolean для определения необходимости в добавлении класса mystyle div-элементу, например isActive.
    2. Повесить обработчик события click на кнопку.
    3. Изменять по клику состояние на противоположное.
    4. В зависимости от значения состояния isActive, либо добавляем класс mystyle div-элементу, либо нет.

    Решение:
    Шаг 1: Заводим ключ состояния

    // class component example
    class Example extends React.Component {
      state = {
        isActive: false,
      };
    
      render() {
        const { isActive } = this.state;
    
        return (
          <div>
            <button>Try it</button>
            <div>
              This is a DIV element.
            </div>
          </div>
        );
      }
    }

    // functional component example
    const Example = () => {
      const [isActive, setIsActive] = useState(false);
    
      return (
        <div>
          <button>Try it</button>
          <div>
            This is a DIV element.
          </div>
        </div>
      );
    }
    Шаг 2: Вешаем обработчик события click на кнопку

    // class component example
    class Example extends React.Component {
      state = {
        isActive: false,
      };
    
      handleClick = () => {
      };  
    
      render() {
        const { isActive } = this.state;
    
        return (
          <div>
            <button onClick={this.handleClick}>Try it</button>
            <div>
              This is a DIV element.
            </div>
          </div>
        );
      }
    }

    // functional component example
    const Example = () => {
      const [isActive, setIsActive] = useState(false);
    
      const handleClick = () => {
      };
    
      return (
        <div>
          <button onClick={handleClick}>Try it</button>
          <div>
            This is a DIV element.
          </div>
        </div>
      );
    }
    Шаг 3: Изменяем по клику состояние на противоположное

    // class component example
    class Example extends React.Component {
      state = {
        isActive: false,
      };
    
      handleClick = () => {
        this.setState(state => ({ isActive: !state.isActive }));
      };  
    
      render() {
        const { isActive } = this.state;
    
        return (
          <div>
            <button onClick={this.handleClick}>Try it</button>
            <div>
              This is a DIV element.
            </div>
          </div>
        );
      }
    }

    // functional component example
    const Example = () => {
      const [isActive, setIsActive] = useState(false);
    
      const handleClick = () => {
        setIsActive(s => !s);
      };
    
      return (
        <div>
          <button onClick={handleClick}>Try it</button>
          <div>
            This is a DIV element.
          </div>
        </div>
      );
    }
    Шаг 4: Добавляем логику установки значения класса в зависимости от состояния

    // class component example
    class Example extends React.Component {
      state = {
        isActive: false,
      };
    
      handleClick = () => {
        this.setState(state => ({ isActive: !state.isActive }));
      };  
    
      render() {
        const { isActive } = this.state;
    
        return (
          <div>
            <button onClick={this.handleClick}>Try it</button>
            <div className={isActive ? 'mystyle' : ''}>
              This is a DIV element.
            </div>
          </div>
        );
      }
    }

    // functional component example
    const Example = () => {
      const [isActive, setIsActive] = useState(false);
    
      const handleClick = () => {
        setIsActive(s => !s);
      };
    
      return (
        <div>
          <button onClick={handleClick}>Try it</button>
          <div className={isActive ? 'mystyle' : ''}>
            This is a DIV element.
          </div>
        </div>
      );
    }

    P.S. Лучшее, что вы можете для себя сделать, это перестать просить готовые решения и пытаться решать задачи самостоятельно. Задачи всех ваших вопросов идентичны, но из-за того, что вы не пытаетесь их решить сами, они по-прежнему вызывают у вас затруднения. Для всего того, что вы спрашивали ранее, так же как и для этой задачи, достаточно простой декомпозиции и ознакомления с нужными разделами документации.
    Ответ написан
    Комментировать
  • Почему в React такая схема?

    @EvgeniiR
    https://github.com/EvgeniiR
    Рендерится то что вернётся из функционального компонента App().
    App() рендерит div внутри которого 3 раза рендерится то, что вернёт компонент Welcome(), который, в свою очередь, возвращает заголовок с приветствием.
    Вот такой порядок. В чем проблема?

    Если через ReactDOM отрендерить тег Welcome мы получим один заголовок с приветствием вместо трёх
    Ответ написан
    2 комментария
  • Как написать вкладки Accordion на React?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Ваш код с парой исправлений:
    const TabContent = ({ content }) => (
      <div className="accordion">
        <p>{content}</p>
      </div>
    );
    
    function Tabs({ items }) {
      /* (1) Добавлено значение по-умолчанию для активной вкладки */
      const [active, setActive] = React.useState(0);
      
      /* (2) Хандлер по-хорошему не должен ничего возвращать */
      const openTab = e => {
        setActive(+e.target.dataset.index);
      };
    
      return (
        <div>
          <div className="tab">
            {items.map((n, i) => (
              <button
                /* (3) Добавлено свойство key */
                key={i}
                className={`tablinks${i === active ? ' active' : ''}`}
                onClick={openTab}
                data-index={i}
              >
                {n.title}
              </button>
            ))}
          </div>
          {items[active] && <TabContent {...items[active]} />}
        </div>
      );
    }
    
    /* (4) Добавлено свойство title для каждого пункта */
    /* (5) Добавлены открывающие кавычки для значений content */
    const items = [
      {
        title: 'First',
        content:
          '1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.'
      },
      {
        title: 'Second',
        content:
          '2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.'
      },
      {
        title: 'Third',
        content:
          '3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.'
      }
    ];
    
    ReactDOM.render(<Tabs items={items} />, document.getElementById('app'));
    Ответ написан
    Комментировать
  • Как написать вкладки(tabs) на React?

    0xD34F
    @0xD34F Куратор тега React
    Данные вкладок кладём в массив:

    const items = [
      { title: 'London', content: 'London is the capital city of England.' },
      { title: 'Paris', content: 'Paris is the capital of France.' },
      { title: 'Tokyo', content: 'Tokyo is the capital of Japan.' },
    ];

    Делаем компонент, отображающий вкладку. Тут ничего сложного - просто выводятся переданные данные:

    const TabContent = ({ title, content }) => (
      <div className="tabcontent">
        <h3>{title}</h3>
        <p>{content}</p> 
      </div>
    );

    Делаем компонент, который будет отображать корешки вкладок и активную вкладку. Данные активной вкладки определяются через индекс соответствующего элемента в массиве, который хранится в компоненте и устанавливается при клике на корешок:

    function Tabs({ items }) {
      const [ active, setActive ] = React.useState(null);
    
      const openTab = e => setActive(+e.target.dataset.index);
    
      return (
        <div>
          <div className="tab">
            {items.map((n, i) => (
              <button
                className={`tablinks ${i === active ? 'active' : ''}`}
                onClick={openTab}
                data-index={i}
              >{n.title}</button>
            ))}
          </div>
          {items[active] && <TabContent {...items[active]} />}
        </div>
      );
    }

    https://jsfiddle.net/0dhaojze/
    Ответ написан
    1 комментарий
  • Правильно ли я понимаю функцию(предназначение) слова this в даном примере?

    ruddy22
    @ruddy22
    Спасение утопающих — дело рук самих утопающих
    привет.
    если говорить коротко, да и про JS, то ты на верном пути.
    ключевое слово `this` указывает на контекст исполнения функции, соответственно контекст можно менять.
    к явным методам изменения контектса относят методы: `bind`, `call`, `apply`, к неявным - оператор "точка" (`obj.getName()`), ключевое слово `new` и другие случаи.

    те 2 сниппета, что ты указал с примерами `Сart` не равнозначны, хоть занимаются, примерно, одним и тем же.

    разберем пример неявного случая с оператором "точка":
    /**
     * какая-то функция, которая возвращает поле объекта name
     * @returns {String}
     */
    function getName () {
      return this.name ? this.name : null;
    }
    
    var obj1 = {
      name: 'name1',
      getName: getName
    }
    
    var obj2 = {
      name: 'name2',
      getName: getName
    }
    
    // в данном случае, getName смотрит на obj1#name
    console.log(obj1.getName()) // name1
    
    // в данном случае, getName смотрит на obj2#name
    console.log(obj2.getName()) // name2


    советую, ознакомиться с методами задания контекста исполнения функции в книге `Reliable JavaScript: How to Code Safely in the World's Most Dangerous Language`, там достаточно наглядно описано.

    если лень читать книгу, то посмотри эти 2 раздела: learn.javascript.ru/functions-closures и learn.javascript.ru/objects-more
    Ответ написан
    2 комментария