1. class MessageContainer extends Component {
    2. constructor (props) {
    3. super(props)
    4. this.state = {
    5. onlyUnread: false,
    6. messages: []
    7. }
    8. }
    9. componentDidMount () {
    10. $.ajax({
    11. url: "/api/messages",
    12. }).then(({messages}) => this.setState({messages}))
    13. }
    14. handleClick = () => this.setState({onlyUnread: !this.state.onlyUnread})
    15. render () {
    16. return <MessageList
    17. messages={this.state.messages.filter(msg => this.state.onlyUnread ? !msg.asRead : true)}
    18. toggleUnread={this.handleClick}
    19. />
    20. }
    21. }
    22. function MessageList ({messages, toggleUnread}) {
    23. return (
    24. <div class="message">
    25. <ul>
    26. .map(({content, author}) => {
    27. return <li>{content}—{author}</li>
    28. })
    29. }
    30. </ul>
    31. <button onClick={toggleUnread}>toggle unread</button>
    32. </div>
    33. )
    34. }
    35. MessageList.propTypes = {
    36. messages: propTypes.array.isRequired,
    37. toggleUnread: propTypes.func.isRequired
    38. }