Hmm, saya tidak melihat kelalaian saya, tetapi saya mendapatkan halaman kosong dengan kesalahan konsol yang mengatakan:
Users.js:9 Uncaught TypeError: Cannot read property 'filter' of undefined
at Users.render (Users.js:9)
Rupanya saya menggunakan 'filter()' dengan tidak benar. Saya mencari-cari tetapi tidak menemukan sesuatu yang berhubungan dengan React. Adakah yang bisa membantu? Berikut adalah file-filenya:
<!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')
);
Pengguna.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;
Anda memanggil .friend
pada daftar itu sendiri padahal itu adalah properti dari setiap objek dalam larik Anda. Anda juga menggunakan .filter
, tetapi saya rasa Anda tidak menggunakannya dengan benar di sini. .filter
akan mengembalikan sebuah larik dengan elemen-elemen tertentu di mana fungsi yang dilewatkan akan mengembalikan nilai kebenaran. Berikut'bagaimana Anda bisa melakukannya dengan .filter
:
var nonFriends = this.props.list.filter(function (user) {
return !user.friend;
});
var friends = this.props.list.filter(function (user) {
return user.friend;
});
return (
<div>
<h1>Friends:</h1>
<ul>{ friends }</ul>
<h1>Non Friends:</h1>
<ul>{ nonFriends }</ul>
</div>
);
Anda juga bisa melakukan .forEach
untuk 1 kali melewati larik jika lariknya besar:
var nonFriends = [], friends = [];
this.props.list.forEach(function (user) {
if (user.friend) {
friends.push(user);
} else {
nonFriends.push(user);
}
});
// now render friends and nonFriends
Saya akan melakukan sesuatu seperti ini yang sedikit lebih mudah
{this.props.list.map(function (person, i) {
{return person.friend
?(<li key={i}>{person.name}</li>)
: null
}
})}
this.props.list.list.friend.filter
tidak bekerja.kunci
dalam markup untuk item-item yang diiterasi yang dibuat. Itulah bagaimana React membuat hubungan antar komponen di pohon state.