React TypeError: невозможно прочитать свойство searchField неопределенного

TypeError: Cannot read property 'searchField' of undefined
Function.mapStateToProps [as mapToProps]
C:/Users/windw/Desktop/robofriends/src/containers/App.js:11
   8 | 
   9 | const mapStateToProps = state => {
  10 |     return {
> 11 |         searchField: state.searchRobots.searchField
  12 |     }
  13 | }
  14 | 

React TypeError: невозможно прочитать свойство searchField неопределенного

извините searchField вместо toLowerCase

Ahmed Mohamed Abdo 21.03.2019 16:16

Не могли бы вы скопировать код компонента вместо изображения?

Avanthika 21.03.2019 16:17

В searchRobots нет state

adiga 21.03.2019 16:21
github.com/ahmedabdo97/robofriends это ссылка на проект
Ahmed Mohamed Abdo 21.03.2019 16:36

это файл включен

Ahmed Mohamed Abdo 21.03.2019 16:37
Поведение ключевого слова "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) для оценки ваших знаний,...
1
6
925
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Очевидно, что searchRobots не существует в состоянии/хранилище или пусто. Можете ли вы проверить, чтобы убедиться, что вы имеете в виду правильное свойство searchRobots в состоянии?

я добавил полный проект и файл, потому что я новый и до сих пор не понял, что вы имеете в виду

Ahmed Mohamed Abdo 21.03.2019 16:37

Я не вижу кода REDUX в вашем репо. Я хочу сказать, что в магазине, похоже, нет свойства searchRobots.

Peter 21.03.2019 16:49

Я сделал копию вашего кода и приложил здесь рабочий фрагмент. Единственное изменение, которое вы должны внести, находится в <SearchBox />, как показано на рисунке. Я не понимаю, почему вы используете редукцию. Обязательно обновляйте глобальное состояние только в случае необходимости.

Надеюсь, это полезно!

const CardList = ({ robots }) => {
  return (
    <div>
      {robots.map((user, i) => {
        return (
          <div
            key = {i}
            className = "bg-light-green dib br3 pa3 ma2 grow bw2 shadow-5"
          >
            <img
              src = {`https://robohash.org/${user.id}?200x200`}
              alt = "Robot Based On Char."
            />
            <div>
              <h2>{user.name}</h2>
              <p>{user.email}</p>
            </div>
          </div>
        );
      })}
    </div>
  );
};

const SearchBox = ({ searchfield, searchChange }) => {
  return (
    <div>
      <input
        className = "pa3 ba b--green bg-lighttest-blue"
        type = "search"
        placeholder = "search robots"
        onChange = {e => searchChange(e)}
      />
    </div>
  );
};

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      robots: [],
      searchfield: ""
    };
  }

  componentDidMount() {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then(response => response.json())
      .then(users => this.setState({ robots: users }));
  }

  onSearchChange = event => {
    this.setState({ searchfield: event.target.value });
  };

  render() {
    const { robots, searchfield } = this.state;
    const filteredRobots = robots.filter(robot => {
      return robot.name.toLowerCase().includes(searchfield.toLowerCase());
    });
    return (
      <div>
        <SearchBox searchChange = {this.onSearchChange} />
        <CardList robots = {filteredRobots} />
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.5.3/react.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.5.3/react-dom.min.js"></script>

Я не смог найти какой-либо избыточный код в файле github.com/ahmedabdo97/robofriends/blob/master/src/container‌​s/…, как указано в ошибке.

Peter 21.03.2019 17:05

да, на скриншоте, который он нам дал, он добавил некоторый код сокращения. Хотя я не мог понять, почему он это сделал.

Avanthika 21.03.2019 17:09

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

Ahmed Mohamed Abdo 21.03.2019 20:55

хаха :) хорошо. В приведенном выше решении мы просто привязываем функцию к обработчику onclick.

Avanthika 21.03.2019 21:24
Ответ принят как подходящий

использовать этот searchField: состояние.searchField вместо searchField: состояние.searchRobots.searchField

И ваш инструктор также поможет вам удалить поисковых роботов в более поздней части видео.

Для тех, кто следует курсу anaagoie и по-прежнему сталкивается с этой проблемой, самый простой хак, который вы можете сделать, — это импортировать searchRobots из редьюсеров в ваш App.js и изменить

searchField: state.searchRobots.searchField

к

searchField: searchRobots(state.searchField)

Это работало отлично и легко для меня.

вы наверное делаете курс от udemy. Это имеет этот пример. Потому что я также сделал это. Если нет, не беспокойтесь, это то же самое упражнение, и у меня есть для вас отладка. Когда вы используете избыточность только с одним глобальным состоянием, используя createStore, вы не добавляете переменную searchRobots в ключ searchField, вместо этого она должна быть state.searchField,

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