Функция карты с Graphql, React

Я пишу небольшое приложение для блога с Gatsby (React и Graphql). Есть маленькая вещь, которую я не совсем понимаю. Вот код страницы моего блога:

const Blog = ({ data }) => {
  console.info(data)
  return (
  <Layout>
    <h1>Blog</h1>
    {data.allMarkdownRemark.edges.map(({ node }) => (
      <div key = {node.id}>
        <h3>{node.frontmatter.title}</h3>
      </div>
    ))}
  </Layout>)
}

export default props => (
<StaticQuery
      query = {graphql`
        query {
  allMarkdownRemark {
    totalCount
    edges {
      node {
        id
        frontmatter {
          title
          path
          date
          tags
        }
      }
    }
  }
}
      `}
      render = { data => <Blog data = {data} {...props} />} 
    />
)

Что меня смущает, так это эта строка:

{data.allMarkdownRemark.edges.map(({ node }) => (

мой вопрос, почему это возвращает ошибку:

{data.allMarkdownRemark.edges.map( node  => (

Зачем нужны фигурные скобки? Путаница возникает из-за того, что мы уже получаем список от markdownremark.edges, так почему мы должны снова указывать, что это динамически сгенерированный контент? Это что-то с графом?

Было бы здорово узнать ответ, заранее спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
0
1 646
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это функция деструктурирования Javascript...

 let test = [{name : 'sathish'},{name : 'steve'}];

 //here you are access directly with destructuring es6 feture
 test.map(({name})=>{console.info(name)}

 test.map((fullObj)=>{console.info(fullObj.name)})

Обратитесь к этому -> деструктуризация js...

Ответ принят как подходящий

Это функция деструктуризации объектов и сокращения свойств.
1.) What will happen when using curly braces..
-> когда вы повторяете использование карты в списке ребер, вы получаете объект края в своей функции карты, в то же время вы явно упоминаете об уничтожении свойства узла из объекта края.

 {data.allMarkdownRemark.edges.map(({ node }) => (
      <div key = {node.id}>
        <h3>{node.frontmatter.title}</h3>
      </div>
    ))}

2.) What will happen when curly braces not use.
-> когда вы перебираете карту в списке ребер, вы получаете объект ребра в качестве параметра внутри функции. в этом случае вы должны получить явный доступ к свойству узла.

 {data.allMarkdownRemark.edges.map( edge  => (
      <div key = {edge.node.id}>
        <h3>{edge.node.frontmatter.title}</h3>
      </div>
    ))}

Ссылка: Разрушение объекта Надеюсь, это рассеет ваши сомнения..

Спасибо! А к другим ответам, большое спасибо за вашу помощь :)

Raph117 01.03.2019 14:20

Если я хорошо понимаю, то вы не знаете, зачем нужны фигурные скобки вокруг узла. Это синтаксис es6, называемый деструктурированием.. Когда параметр функции имеет свойство, вы можете извлечь это свойство таким образом.

({ node }) => ( <div key = {node.id}> // you can use the node here 

Это эквивалентно с.

(data) => ( <div key = {data.node.id}>  // you must use the property thought the parameter

Подробнее об этом можно прочитать здесь: http://es6-features.org/#ObjectMatchingShorthandNotation

Другие вопросы по теме