使用React Context进行状态管理(八)在函数组件中使用useContext

React Hooks可以让我们完全抛弃类组件,让我们彻底完全函数化。其中的useContext就是用来在函数组件中使用Context的。

我们以MessageList组件为例来看看具体怎么使用。

import React, { useContext } from 'react'
import { UserContext } from './UserContext'
import { MessageContext } from './MessageContext'

const MessageList = () => {
  const { user } = useContext(UserContext)
  const { loading, messages, onSelectMessage } = useContext(MessageContext)
  return (
    <div>
      {
        loading ? <div>加载中......</div> :
          messages.length === 0 ? <div>没有信息, {user.name}</div> :
            <ul>
              {messages.map(message => <Message key={message.id} message={message} onClick={() => onSelectMessage(message)} />)}
            </ul>
      }
    </div>
  )
}

const Message = ({ message, onClick }) => (
  <li onClick={onClick}>
    <div>{message.subject}</div>
  </li>
)

export default MessageList

首先引入useContext,然后在return之前使用useContext解构UserContext和MessageContext,最后删掉JSX中的Consumer。是不是比之前的两层嵌套Consumer漂亮多了?(注意改写UserContext和MessageContext,导出整个Context变量)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容