首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用React-Context时,对象不是可迭代错误

使用React-Context时,对象不是可迭代错误
EN

Stack Overflow用户
提问于 2020-04-01 18:24:22
回答 1查看 9.6K关注 0票数 2

所以我最近开始使用React,并且正在学习上下文Api。我的代码的兴趣在于:

代码语言:javascript
复制
export const UsersContext = createContext();
export function UsersProvider(props) {
    const fetchedItem = async function () {
        const data = await fetch('https://jsonplaceholder.typicode.com/users');
        const users = await data.json();
        setUsers(users);
    };
    const [users, setUsers] = useState([]);
    useEffect(function () {
        fetchedItem();
    }, []);

    return (
        <UsersContext.Provider value={[users, setUsers]}>{props.children}</UsersContext.Provider>
    );
}

我尝试导入并迭代users数组,如下所示:

代码语言:javascript
复制
import { UsersContext, UsersProvider } from './UsersContext';
export default function UsersPage() {
    const [users, setUsers] = useContext(UsersContext);
return (
        <UsersProvider>
{users.map(function (user) {
//I do something with user object});}
</UsersProvider>

问题是这不起作用,我不确定在网络上搜索它的术语是什么。我得到了TypeError: Object is not iterable (cannot read property Symbol(Symbol.iterator)),这对我来说意味着users不是一个数组?但就我而言是这样的。对修复/调试这个问题有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 18:46:07

如果您在提供程序之外使用useContext,则应该在子组件中使用useContext

代码语言:javascript
复制
import { UsersContext, UsersProvider } from './UsersContext';
export default function UsersPage() {
  const [users, setUsers] = useContext(UsersContext);
  return (
    <UsersProvider>
      {users.map(function (user) {
        <div key={user.id}>{user.id}</div>
      })}
    </UsersProvider>
  );
}

等同于

代码语言:javascript
复制
import { UsersContext, UsersProvider } from './UsersContext';
export default function UsersPage() {
  return (
    <UsersContext.Consumer>
      {([users, setUsers]) => (
        <UsersProvider>
          {users.map(function(user) {
            <div key={user.id}>{user.id}</div>;
          })}
        </UsersProvider>
      )}
    </UsersContext.Consumer>
  );
}

正如您所看到的,使用者不是提供者的子级,因此没有向其提供任何内容。在子组件中使用它是可行的。

代码语言:javascript
复制
import { UsersContext, UsersProvider } from './UsersContext';
export default function UsersPage() {
  return (
    <UsersProvider>
      <UsersPageChild />
    </UsersProvider>
  );
}

function UsersPageChild() {
  const [users, setUsers] = useContext(UsersContext);
  return (
    <div>
      {users.map(function(user) {
        <div key={user.id}>{user.id}</div>;
      })}
    </div>
  );
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60968735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档