React - Как сравнить реквизит между отдельными компонентами - PullRequest
0 голосов
/ 21 ноября 2018

Как я могу сравнить, если реквизиты между двумя отдельными компонентами имеют одинаковое значение?

1- Является ли то, что я ищу, выполнимым?

2- Если нет, как еще я могу выполнить задание ниже:

История:

  • У меня есть массив автомобильных объектов.Название каждого автомобиля отображается как <li /> на компоненте <CarList />.При нажатии на каждый <li/> цвет автомобиля раскрывается

  • У меня есть компонент <Question />, который отображает: "Какой автомобиль (здесь случайный цвет)"?

Изменение пользовательского интерфейса: Как можно написать метод, который:

  • Проверяет, является ли props.color <CarList /> === props.colorиз <Question />
  • Затем запускается изменение пользовательского интерфейса, например:
  • onClick : If цвет автомобиля соответствует цвету вопроса: измените <li /> назеленый (то есть: цвет фона), else изменить его на красный.

Я изо всех сил (интересно, если это возможно), чтобы сравнить реквизит из разных компонентов + написание метода, который проверяет и выполняетизменение интерфейса выше.

Этот код отражает объяснение, приведенное выше: Также вот песочница

// Garage
export default class Garage extends Component {
  state = {
    cars: [
      { name: "Ferrari", color: "red", id: 1 },
      { name: "Porsche", color: "black", id: 2 },
      { name: "lamborghini", color: "green", id: 3 },
      { name: "McLaren", color: "silver", id: 4 },
      { name: "Tesla", color: "yellow", id: 5 }
    ]
  };

  handleShuffle = () => {
    this.setState({
      cars: [...this.state.cars.sort(() => Math.random() - 0.5)]
    });
  };

  render() {
    const { cars } = this.state;
    const car = cars.map(car => (
      <CarList key={car.id} make={car.name} color={car.color} />
    ));

    const guess = cars
      .slice(2, 3)
      .map(car => <Question key={car.id} color={car.color} />);
    return (
      <>
        <div>{guess}</div>
        <button onClick={this.handleShuffle}>load color</button>
        <ul>{car}</ul>
      </>
    );
  }
}

// CarList
class CarList extends Component {
  state = {
    show: false
  };

  handleShow = () => {
    this.setState({ show: true });
    console.log(this.props);
    // check for props equality here

    //desired result for <li /> would be
    // className={ correctColor ? 'green' : 'red'}
  };

  render() {
    console.log("car color props:", this.props.color);
    const { make, color } = this.props;
    const { show } = this.state;
    return (
      <li onClick={this.handleShow}>
        {make}
        <span className={show ? "show" : "hide"}>{color}</span>
      </li>
    );
  }
}

// Question
const Question = ({ color }) =>
  console.log("question color prop:", color) || <h1>What car is {color}</h1>;

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Есть много способов сделать это, но самый простой - отправить цвет в вопросе на автомобильный компонент.

https://codesandbox.io/s/my4wmn427x

0 голосов
/ 21 ноября 2018

Да, вы можете передать правильный цвет компоненту CarList или флагу, является ли CarList правильным.Проверьте мою песочницу.

https://codesandbox.io/s/92xnwpyq6p

По сути, мы можем добавить isCorrect prop к CarList, который имеет значение correctCar.color === car.color, и мы используем его, чтобы определить, следует ли сделать его зеленымили красный.

...