, 그래서 당신은 또한 유일한 식별자를 첨부해야합니다. React는 이러한 키를 사용하여 DOM 업데이트를 모니터링하면서 렌더링을 최적화합니다. 당신은 당신이를 더 최적화 할 수 반복자를 북마크를 destructuring에 의해 {}
return (
// ... snip
{this.props.bookmarks.bookmarks.map((bookmark) => {
return <p key={bookmark.id}>{bookmark.title}</p>;
});}
// ... snip
)
에 포장, 및 암시 적 수익을 활용해야 할 수 있도록이 보이는
는 다른 JSX 코드 내부에 포함됩니다 : 내 예에서
const { bookmarks } = this.props.bookmarks
return (
// ... snip
{bookmarks.map((bookmark) => <p key={bookmark.id}>{bookmark.title}</p>)}
// ... snip
)
,
bookmark.id
는 오랫동안 고유의로, 심지어
bookmark.title
아무것도 될 수 있습니다. 당신이 렌더링 할 때, 당신은 항상 부모 요소에 포장해야한다
constructor(props) {
super(props)
// set initial button state to false
this.state = {
buttonClicked: false
}
}
// method to handle button clicking
handleButton(e) {
e.preventDefault()
console.log('Radical button firing.')
// set state to opposite of current
this.setState({ buttonClicked: !this.state.buttonClicked })
}
render() {
if (!this.props.bookmarks) return <div>Loading...</div>
const { bookmarks } = this.props.bookmarks
return (
<div>
<h3>Checkout my Rad Books</h3>
{bookmarks.map((bookmark) => <p key={bookmark.id}>{bookmark.title}</p>)}
<button onClick={(e) => this.handleButton(e)}>{(!this.state.buttonClicked) ? 'Not Clicked Yet' : 'Was Clicked'}</button>
</div>
)
}
: 당신이 그것을 볼 수 있도록
난 그냥 몇 가지 추가 JSX/HTML 내부에서이 문제를 보여주는 예제를 추가 할 것입니다, 완전한 원을 올 이 경우 div를 사용했습니다. 여기에는 부유 한 데이터가 포함되어있어 법의학 분석과 테스트를 더 진행할 수 있습니다.
여기에 모두 나와 있습니다. 우리는 또한 렌더링 방법으로 그 도서 목록을 뽑을 수 :
renderBooks() {
if (!this.props.bookmarks.bookmarks) return <div>Loading bookmarks...</div>
const { bookmarks } = this.props.bookmarks
return (
<div>
{bookmarks.map((bookmark) => <p key={bookmark.id}>{bookmark.title}</p>)}
</div>
)
}
render() {
return (
<div>
<h3>Checkout my Rad Books</h3>
{this.renderBooks()}
<button onClick={(e) => this.handleButton(e)}>{(!this.state.buttonClicked) ? 'Not Clicked Yet' : 'Was Clicked'}</button>
</div>
)
}
'this.props.bookmarks.bookmarks'는 정확합니다. 왜 'this.props.bookmarks'가 아니겠습니까? 코드는 괜찮아 보이고 데이터가 맞다면 렌더링해야합니다. 렌더링 전에 console.log를 넣으십시오 – Mikkel