получение состояния от connect (mapStateToProps)> НЕ УКАЗАНО - PullRequest
0 голосов
/ 08 мая 2018

Я немного изо всех сил пытаюсь получить состояние книги, когда я регистрирую реквизиты, я получаю книгу: undefined.

Любые советы?

import React from 'react';
import { connect } from 'react-redux';
import BookForm from './BookForm';

const EditBook = (props) => {
 console.log(props)
  return (
    <div>
      hello
    </div>
  );
};

const mapStateToProps = (state, props) => {
  return {
    book: state.books.find((book) => book.id === props.match.params.id)
  };
};

export default connect(mapStateToProps)(EditBook);

Остальная часть проекта на моем Github: https://github.com/bananafreak/bookshelf

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Мне удалось выяснить, где была моя ошибка.

В компоненте BookListItem:

import React from 'react';
import { Link } from 'react-router-dom';

const BookListItem = ({ author, title, genre, text, id, pages }) => (
  <div>
    <Link to={`/edit/${id}`}><h2>{title}</h2></Link>
    <h3>by: {author}</h3>
    <p>{genre}</p>
    {pages > 0 && <p>{pages} pages</p>}
    <p>{text}</p>
    <p>-------------------------------</p>
  </div>
);

export default BookListItem;

До $ {id}, к сожалению, у меня было двоеточие {/edit/:${id}}, поэтому book.id и props.match.params.id не могли совпадать

0 голосов
/ 08 мая 2018

Обновите Link в BookListItem. Вам не нужно : до ${id}. : вызывает проблему.

<Link to={`/edit/${id}`}><h2>{title}</h2></Link>

В компоненте EditBook вернуть следующее

<BookForm {...props}></BookForm>

В BookForm constructor установите состояние от props.book

this.state = { ...props.book }
0 голосов
/ 08 мая 2018

Я столкнулся с проблемами с этим раньше, где === потерпит неудачу, потому что типы book.id и props.match.params.id различны. Значения params всегда являются строками - возможно, попробуйте сравнение parseInt(props.match.params.id) или == (с приведением типа).

...