Условное утверждение в конкатенации литералов шаблона? - PullRequest
2 голосов
/ 22 марта 2020

Я делаю вызов API следующим образом:

posts: (ppp, page) =>
    requests.get(`/wp-json/wp/v2/posts?per_page=${ppp}&page=${page}`)

Я не всегда буду передавать сообщения на странице или странице, поэтому я хотел бы объединить эти переменные, только если они существуют. Я попробовал ниже, но я не могу отформатировать:

requests.get(`/wp-json/wp/v2/posts?`${ppp ? `'per_page='${ppp} : `''` `${page} ? `'&page=' ${page}` :''`)

1 Ответ

3 голосов
/ 22 марта 2020

Кроме того, что ваше второе решение содержит синтаксические ошибки, это также не самый читаемый способ сделать это ...

Но почему вы пытаетесь изобрести колесо?

Вы можно использовать API URL, который доступен как на стороне клиента , так и в Node.js:

posts: (ppp, page) => {
  const url = new URL('/wp-json/wp/v2/posts')
  if(ppp) url.searchParams.append('per_page', ppp)
  if(page) url.searchParams.append('page', page)
  return requests.get(url.href)
}  

Однако, если вы не можете используйте вышеупомянутое решение по некоторым причинам, вы все еще можете реализовать аналогичный алгоритм, который работает как вышеупомянутое решение. Например, вы можете использовать массив:

posts: (ppp, page) => {
  const urlParams = []
  if(ppp) urlParams.push(`per_page=${ppp}`)
  if(page) urlParams.push(`page=${page}`)
  return requests.get(`/wp-json/wp/v2/posts?${ urlParams.join('&') }`)
}  

или еще более гибкое решение:

posts: (ppp, page) => {
  const urlParams = {
    per_page: ppp, //per_page=ppp
    page,          //page=page
                   //Add more here if you want
  }
  return requests.get(`/wp-json/wp/v2/posts?${ 
    Object
      .entries(urlParams)
      .filter(([k, v]) => v) //If value is truthy
      .map(e => e.join('=')) //Concatenate key and value with =
      .join('&') //Concatenate key-value pairs with &
  }`)
}  

Но, если вы хотите придерживаться своей версии, вот фиксированный пример это:

requests.get(`/wp-json/wp/v2/posts?${ppp ? `per_page=${ppp}` : ''}${(ppp && page) ? '&' : ''}${page ? `page=${page}` : ''}`)

...