Реагировать: как отобразить объект по умолчанию и выделить li жирным шрифтом?

Я новичок в React, и мне было интересно, может ли кто-нибудь дать мне представление о проблеме, с которой я застрял.

Прямо сейчас у меня есть родительский компонент (Hello.js) и два дочерних компонента (Mixer.js и renderCont.js) на том же уровне.

Я пытаюсь отобразить список в Mixer.js и отобразить соответствующие объекты в Hello.js, передав значения в RenderCont.js. Я дошел до точки, когда ничего не отображается, прежде чем я нажму на любой из списка, чтобы передать объект.

Вот где я застрял: я хочу, чтобы первый объект списка отображался по умолчанию, в то же время жирным шрифтом первый в списке. А затем выполните, как показано ниже.

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

Родитель Hello.js:

import React, { Component } from 'react';
import RenderCont from './renderCont.js';
import Mixer from './Mixer';

class Hello extends Component{
    constructor(props) {
        super(props);
        this.state = {
        items: [{
            id: 0,
            name: "First",
            background: "white"
        }, {
            id: 1,
            name: "Second",
            background: "yellow"
        }, {
            id: 2,
            name: "Third",
            background: "blue"
        }],
        selectedItem: 0
        }
        this.handle = this.handle.bind(this)
    }

    handle(value) {
        // console.info(this.state.selectedItem);
        this.setState({
            selectedItem: value
        })
      }

      render() {
        const list = this.state.items.map((item) => {
            return(item);
        })
        return (
        <div>
            <Mixer item = {list} onClick = {this.handle} selected = {this.state.selectedItem}/>
            <ul id = "todo" > 
                <RenderCont item = {this.state.selectedItem}/>
            </ul>
        </div>
      ) 
    }
}

export default Hello;

Mixer.js Child1:

    import React, { Component } from 'react';

    class Mixer extends Component{
        constructor(props) {
            super(props);
            this.state = {
            }
        this.handleClick = this.handleClick.bind(this);

    }

    handleClick(item){
        this.props.onClick(item);
    }

    renderTodos(propItems) {
          return (
              <div>
                {propItems.map((item) => (
                <li className = {this.props.selected === item ? 'media clicked' : 'media'}
                key = {item.id} onClick = {() => this.handleClick(item)}> 
                    {item.name}  
                </li>
                ))}
           </div>
          )
      }

      render() {
          return ( 
            <div className = "yoyoyo">
                {this.renderTodos(this.props.item)}
            </div>
      ) 
    }
}

export default Mixer;

Второй дочерний компонент renderCont.js:

import React, { Component } from 'react';

class RenderCont extends Component{
    constructor(props) {
        super(props);
    }

    renderBox(item){
        return(
            <div style = {{color:item.background}}>
                {item.id}
                {item.name}
            </div>
        )
    }

    render() {
    return ( 
        <div className = "yoyo">
            {this.renderBox(this.props.item)}
        </div>
    )
    }
}

export default RenderCont;

и CSS:

.yoyo{
  left: 500px;
  background-color:red;
  width:500px;
  height:500px;
}

.media{
  color: black;
}
.clicked{
  font-weight: 900;
}

.yoyoyo{
  background-color:lightblue;
  width:200px;
  height:200px;
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
748
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, проблема в некотором несоответствии между начальным и конечным значением this.props.selected в Mixer.js. Вы изначально устанавливаете this.state.selectedItem = 0, и это то, что изначально передается как опора selected в Mixer. Но тест, который вы применяете в этом компоненте,

this.props.selected === item ?

Хотя есть один item.id, который === 0, никогда не бывает item, который === 0. Таким образом, сначала никакие элементы не выделяются. Но затем, когда щелкнули item и selectedItem фактически настроен на item, запись будет выделена жирным шрифтом.

Таким образом, похоже, что вам нужно либо сделать свой первоначальный выбор равным ссылке item.id === 0, либо последовательно ссылаться на items в ваших компонентах по их id.

Спасибо, Энди. Как мне реализовать ссылку на элементы в моем компоненте по идентификатору? Также соответствующий объект должен отображаться через renderCont.js. У Вас есть какие-то предложения?

episodewon 24.08.2018 05:51

Другие вопросы по теме