Откуда подставляются категории в коде?

180
28 февраля 2019, 17:20

class SliderSidebar extends Component { 
    componentWillMount() { 
        const { actions } = this.props; 
        actions.fetchListIfNeeded(); 
    } 
 
    componentDidMount() { 
        let $el = $(findDOMNode(this)); 
        if ($el.height() > 514) { 
            $el.addClass('short'); 
        } 
    } 
 
    handleShowMore() { 
        $(findDOMNode(this)).removeClass('short'); 
    } 
 
    render() { 
        const { loading, received, objects } = this.props; 
 
        if (loading || !received) { 
            return null; 
        } 
 
        let data = objects; 
        let dl_count = 0; 
        let dl = data.map(item => { 
            dl_count = dl_count + item.items.length; 
            return item.items.length; 
        }); 
 
        let dlc = dl.map(item => item / dl_count * 100); 
 
        if (dlc.length == 2) { 
            if (dlc[0] > 60) { 
                dlc[0] = 60; 
            } 
            if (dlc[1] < 40) { 
                dlc[1] = 40; 
            } 
        } 
 
        let menuNodes = data.map((item, i) => { 
            let nodes = item.items.map(model => ( 
                    <li key={'ss' + model.id}> 
                        <Link to="CatalogList" params={{url: model.url}}> 
                            {model.name} 
                        </Link> 
                    </li> 
                )); 
 
            return ( 
                <div key={'ssr' + item.id} style={{height: dlc[i] + '%'}} className="root-menu"> 
                    <p><strong>{item.name}</strong></p> 
 
                    <div className="bottom"> 
                        <div className="show_more"> 
                            <span className="text" onClick={this.handleShowMore.bind(this)}> 
                                Смотреть все категории 
                            </span> 
                        </div> 
                        {i != data.length - 1 ? <hr/> : null} 
                    </div> 
 
                    <ul className="sidebar-menu">{nodes}</ul> 
                </div> 
            ); 
        }); 
 
        return <div className="sidebar index short">{menuNodes}</div>; 
    } 
} 
 
export default connect(state => state.category, dispatch => { 
    return { 
        actions: bindActionCreators(actions, dispatch) 
    }; 
})(SliderSidebar);

Есть такая конструкция, я не знаю реакт, поэтому прошу подсказать откуда подставляются категории?

Answer 1

class SliderSidebar extends Component { 
  componentWillMount() { 
      const { actions } = this.props; 
      actions.fetchListIfNeeded(); 
  } 
 
  componentDidMount() { 
      let $el = $(findDOMNode(this)); 
      if ($el.height() > 514) { 
          $el.addClass('short'); 
      } 
  } 
 
  handleShowMore() { 
      $(findDOMNode(this)).removeClass('short'); 
  } 
 
  render() { 
      const { loading, received, objects } = this.props; // objects приходит сверху вместе с props 
 
      if (loading || !received) { 
          return null; 
      } 
 
      let data = objects; // objects присваивается в data 
      let dl_count = 0; 
      let dl = data.map(item => { 
          dl_count = dl_count + item.items.length; 
          return item.items.length; 
      }); 
 
      let dlc = dl.map(item => item / dl_count * 100); 
 
      if (dlc.length == 2) { 
          if (dlc[0] > 60) { 
              dlc[0] = 60; 
          } 
          if (dlc[1] < 40) { 
              dlc[1] = 40; 
          } 
      } 
      /** 
       * массив data перебирается с помощью метода .map() 
       * тоесть item это элемент массива 
       **/  
      let menuNodes = data.map((item, i) => { 
 
          /** 
           * в свою очередь item является тоже массивом и перебирается с помощью метода .map() 
           * и здесь model это элемент массива, который является объектом примерно такого вида: 
           * { 
           *    id: 'some_id', 
           *    url: 'some_url', 
           *    name: 'Category Name' 
           * } 
           **/  
          let nodes = item.items.map(model => ( 
                  // ниже id из объекта ставится как ключ 
                  <li key={'ss' + model.id}>  
                      {/* ниже url из объекта ставится как параметр для <Link /> */} 
                      <Link to="CatalogList" params={{url: model.url}}> 
                          {/* ниже name из объекта ставится как контент для <Link />, по идее это то что Вы ищете */} 
                          {model.name} 
                      </Link> 
                  </li> 
              )); 
 
          return ( 
              <div key={'ssr' + item.id} style={{height: dlc[i] + '%'}} className="root-menu"> 
                  <p><strong>{item.name}</strong></p> 
 
                  <div className="bottom"> 
                      <div className="show_more"> 
                          <span className="text" onClick={this.handleShowMore.bind(this)}> 
                              Смотреть все категории 
                          </span> 
                      </div> 
                      {i != data.length - 1 ? <hr/> : null} 
                  </div> 
 
                  <ul className="sidebar-menu">{nodes}</ul> 
              </div> 
          ); 
      }); 
 
      return <div className="sidebar index short">{menuNodes}</div>; 
  } 
} 
 
export default connect(state => state.category, dispatch => { 
  return { 
      actions: bindActionCreators(actions, dispatch) 
  }; 
})(SliderSidebar);

Если вопрос "откуда реакт берет значение названия для категории?" то ответ:

Из objects, которые передаются в компонент как props, как то так:

<SliderSidebar
  objects={some_data}
/>

и some_data при этом является массивом примерно такой структуры:

[
  [
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    },
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    },
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    }
  ],
  [
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    },
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    },
    {
      id: 'some_id',
      url: 'some_url',
      name: 'Category Name'
    }
  ]
]

Если вопрос "в каком месте я могу заменить название категории на какое-то другое, если я не могу изменить исходные данные?", то ответ:

В этой строке: {model.name}

READ ALSO
&ldquo;Засыпает&rdquo; приложение node.js

“Засыпает” приложение node.js

Пишу приложение на Nodejs

155
Работа с формами на vue.js

Работа с формами на vue.js

Уже как 30 минут изучаю vuejs, полных примеров довольно мало на просторах интернета, поэтому решил поинтересоваться тут

186
mysql where lenght больше нуля. условие where не работает

mysql where lenght больше нуля. условие where не работает

есть таблица, в ней поле ( текстовое! те

177
О хранение изображение в Базе Данных MySql

О хранение изображение в Базе Данных MySql

Есть рекламный вестникМного жалоб приходит о том что изображения долго загружается

153