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);
Есть такая конструкция, я не знаю реакт, поэтому прошу подсказать откуда подставляются категории?
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}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Уже как 30 минут изучаю vuejs, полных примеров довольно мало на просторах интернета, поэтому решил поинтересоваться тут
есть таблица, в ней поле ( текстовое! те
Есть рекламный вестникМного жалоб приходит о том что изображения долго загружается