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 |

Не могли бы вы скопировать код компонента вместо изображения?
В searchRobots нет state
это файл включен



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Очевидно, что searchRobots не существует в состоянии/хранилище или пусто. Можете ли вы проверить, чтобы убедиться, что вы имеете в виду правильное свойство searchRobots в состоянии?
я добавил полный проект и файл, потому что я новый и до сих пор не понял, что вы имеете в виду
Я не вижу кода REDUX в вашем репо. Я хочу сказать, что в магазине, похоже, нет свойства searchRobots.
Я сделал копию вашего кода и приложил здесь рабочий фрагмент. Единственное изменение, которое вы должны внести, находится в <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/containers/…, как указано в ошибке.
да, на скриншоте, который он нам дал, он добавил некоторый код сокращения. Хотя я не мог понять, почему он это сделал.
на самом деле я добавлял, что это было частью моего курса, чтобы узнать, как его использовать, но, честно говоря, я до сих пор не понимаю, почему он поместил его туда
хаха :) хорошо. В приведенном выше решении мы просто привязываем функцию к обработчику onclick.
использовать этот searchField: состояние.searchField вместо searchField: состояние.searchRobots.searchField
И ваш инструктор также поможет вам удалить поисковых роботов в более поздней части видео.
Для тех, кто следует курсу anaagoie и по-прежнему сталкивается с этой проблемой, самый простой хак, который вы можете сделать, — это импортировать searchRobots из редьюсеров в ваш App.js и изменить
searchField: state.searchRobots.searchField
к
searchField: searchRobots(state.searchField)
Это работало отлично и легко для меня.
вы наверное делаете курс от udemy. Это имеет этот пример. Потому что я также сделал это. Если нет, не беспокойтесь, это то же самое упражнение, и у меня есть для вас отладка. Когда вы используете избыточность только с одним глобальным состоянием, используя createStore, вы не добавляете переменную searchRobots в ключ searchField, вместо этого она должна быть state.searchField,
извините searchField вместо toLowerCase