Filtrar una lista con React
Hmm, no veo mi omisión, pero me sale una página en blanco con un error de consola diciendo:
Users.js:9 Uncaught TypeError: Cannot read property 'filter' of undefined
at Users.render (Users.js:9)
Al parecer I'm utilizando 'filter()' incorrectamente. Miré a mi alrededor, pero didn't encontrar nada 'React' relacionados. ¿Alguien puede ayudar? Aquí están los archivos:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Users from './Users';
ReactDOM.render(
<Users list={[
{ name: 'Tyler', friend: true },
{ name: 'Ryan', friend: true },
{ name: 'Michael', friend: false },
{ name: 'Mikenzie', friend: false },
{ name: 'Jessica', friend: true },
{ name: 'Dan', friend: false }
]}
/>,
document.getElementById('root')
);
Users.js
import React from 'react';
class Users extends React.Component {
render() {
return (
<div>
<h1>Friends:</h1>
<ul>
{this.props.list.friend.filter(function (friend) {
return <li>{friend[0] === 'true'}</li>
})}
</ul>
<hr />
<h1>Non Friends:</h1>
<ul>
{this.props.list.friend.filter(function (nonFriend) {
return <li>{nonFriend[0] === 'false'}</li>
})}
</ul>
</div>
);
}
}
export default Users;
7
3
Estás llamando a
.friend
en la propia lista cuando es una propiedad de cada objeto de tu array. También estás usando.filter
, pero no creo que lo estés usando correctamente..filter
devolverá un array con ciertos elementos donde la función pasada devuelve un valor verdadero. Así es como podría hacerlo con.filter
:También podrías hacer un
.forEach
para 1 pasada por el array si el array es grande:Creo que está intentando filtrar el atributo, y no la lista. Trate de cambiar esto:
por esto:
Yo haría algo como esto, que es un poco más sencillo
this.props.list.friend.filter
no funcionaba.