【问题标题】:import props, destructuring assignment & unresolved variable warning导入道具、解构赋值和未解决的变量警告
【发布时间】:2020-06-25 23:18:14
【问题描述】:

我在前端有点新,所以我有一个关于 props 导入的代码实践的问题。

我正在使用next.js(基于 React),我需要从 API 端点将props 插入到我的页面。

According to the example,应该是这样的:

export async function getServerSideProps({query}) {
    const res = await fetch(encodeURI(`url_here+${query}`));
    const json = await res.json();

问题在于“接下来会发生什么”:

如果我将我的道具(上述函数的结果)导出到这样的页面:

    return { props: {
       _id: json._id,
       ilvl: json.ilvl,
       ...
       checksum: json.checksum,

并像使用 destructuring assignment 作为参数函数一样导入它:

function CharacterPage({ _id, id, ... }) {
    ...
}

问题

来自 API 端点的响应 json 对象中几乎有 16+ key:values。 因此,如果我按照上面的代码样式进行操作,那将是.. em.. 猜你已经明白了。

所以我可以从 API 端点导出结果,例如:

export async function getServerSideProps({query}) {
    const res = await fetch(encodeURI(`url_here`));
    const json = await res.json();
    return {props: {json}
}

并导入它,作为页面的一个参数,例如:

function CharacterPage({json})

但如果我在页面上使用 json.name 对象键(用于条件渲染),我的 IDE (WebStrom) 会向我显示未解析变量警告。

那么我在哪里可以阅读正确的导入实践并找到带有大量 JSON 键的 react-import props 示例?

我应该使用: let {id, name, ...etc} = json 紧接着: function CharacterPage({json}) 对于我想要访问的每个密钥,或者有更好的方法/代码实践来导入道具?

【问题讨论】:

  • 您的 getServerSideProps 缺少结尾大括号。是你错过了复制还是出错了?
  • 不,不,不,这不是关于ServerSideProps 或任何其他方法,而是关于代码练习。我不想每次尝试访问密钥时都收到来自 IDE 的警告。所以不要考虑正确的语法等等。这里的重点是你理解逻辑。
  • 好的 :) 我刚刚评论是因为我看到了。我在答案中添加了我的想法。

标签: javascript reactjs next.js


【解决方案1】:

我的第一个想法是您可以修改 JSON 对象以返回 getServerSideProps。更清楚地确定此处使用了哪种具有属性的对象。

return {  props: {
   name: json.name,
   id: json.id
   ...
   }
}

如果做不到,最好先解构。

let {id, name, ...etc} = json

但只解构你需要的元素。无需解构所有元素。

【讨论】:

  • 问题是我需要来自json API 响应的每个键。有时响应有name 键,有时没有。所以我在页面上使用 JSON 中的每个键。
  • 好吧...那么最好去底部。你的代码会更容易理解。
  • 这与使用生命周期方法进行提取(例如使用 componentwillmount 并设置状态和呈现状态以查看)有什么区别?
  • 这个问题与数据获取无关。这是关于读取返回对象的方式。 componentWillMount 已弃用并将在版本 17 中删除。使用单独的方法从 fetch data 定义数据结构是可以的。不需要以一种方法完成所有任务。主要是在一个生命周期方法里面。
猜你喜欢
  • 2022-08-09
  • 2017-04-11
  • 2017-07-22
  • 1970-01-01
  • 2017-04-19
  • 2017-12-11
  • 2022-12-11
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多