当前位置: 首页 > 知识库问答 >
问题:

React-api数据已成功传递给组件(每个检查器),但未呈现

令狐新翰
2023-03-14

我的api数据正在成功地从我的api调用传递到表组件中,但是没有被呈现。

如果在搜索播放列表后,我进入并编辑表格。数据将正确呈现的js文件。应用程序。js。。。

const App = (props) => {
  const [playlists, setPlaylists] = useState([])
  const [searchString, setSearchString] = useState() //use instead of onsubmit 
  const isFirstRef = useRef(true);
  
  const search = (value) => {
    setSearchString(value)
  }

  useEffect(
    () => {
      if (isFirstRef.current) {
      isFirstRef.current = false;
      return;
      }
      let spotlist = Spotify.playlistsearch(searchString)
      let tablelist = []
      spotlist.then(val =>{
        val.forEach(element =>{
          tablelist.push(
            { 
              name: element.description,
              track_count: element.tracks.total,
            })
        } 
      )})
      setPlaylists(tablelist)
      }, [searchString] );

  return (
    <div className="App">
      <Searchform search={search}/>
      <Table playlists={playlists}/>
    </div>
  )
};

播放列表道具在PlayListTable组件检查器下显示为存在,但不呈现。如果我在看到组件检查器中存在的数据后编辑文件,我就能够得到渲染的数据。Table.js

import React from 'react'
import { Icon, Label, Menu, Table } from 'semantic-ui-react'

const PlayListTable = ({ playlists }) => {
  return(
    <Table celled>
      <Table.Header>
        <Table.Row>
          <Table.HeaderCell>Playlist</Table.HeaderCell>
          <Table.HeaderCell>Track Count</Table.HeaderCell>
        </Table.Row>
      </Table.Header>
      <Table.Body>
       {playlists.map( (playlist) => {
          return (
              <Table.Row>
                <Table.Cell>
                  {playlist.name}
                </Table.Cell>
                <Table.Cell>
                  {playlist.track_count}
                </Table.Cell>
              </Table.Row>
              )
            }
          )
        }
      </Table.Body>
      <Table.Footer>
        <Table.Row>
          <Table.HeaderCell colSpan='3'>
            <Menu floated='right' pagination>
              <Menu.Item as='a' icon>
                <Icon name='chevron left' />
              </Menu.Item>
              <Menu.Item as='a'>1</Menu.Item>
              <Menu.Item as='a'>2</Menu.Item>
              <Menu.Item as='a'>3</Menu.Item>
              <Menu.Item as='a'>4</Menu.Item>
              <Menu.Item as='a' icon>
                <Icon name='chevron right' />
              </Menu.Item>
            </Menu>
          </Table.HeaderCell>
        </Table.Row>
      </Table.Footer>
    </Table>
  )
}

export default PlayListTable

共有2个答案

冉伯寅
2023-03-14

我要注意的第一点是,除非searchString在依赖项数组中发生更改,否则不会触发使用效果。此外,我相信您的第一个ref条件会阻止第一次渲染的设置,因此可能会导致问题。

也许最好看看以前的检查,我以前在这里使用过一个公共钩子的解决方案:如何比较React钩子useEffect上的旧值和新值?

当你说播放列表道具显示时,有实际的值吗?

在其他编辑中,确保映射的返回值具有正确的键:https://reactjs.org/docs/lists-and-keys.html

唐阳飙
2023-03-14

您可能正在接收正确的数据,但没有在正确的时间更新状态spotlist返回要从中链接的promise,但是setPlaylists(tablelist)调用在处理promise链的块之前排队。useffect回调是100%同步代码。

let spotlist = Spotify.playlistsearch(searchString);
let tablelist = [];
spotlist.then(val => { // <-- (1) then callback is placed in the event queue
  val.forEach(element => { // <-- (3) callback is processed, tablelist updated
    tablelist.push({ 
      name: element.description,
      track_count: element.tracks.total,
    });
  } 
)});
setPlaylists(tablelist); // <-- (2) state update enqueued, tablelist = []

您可以forEach将响应数据映射到临时数组中,但将响应数据映射到状态值是处理它的更“反应”的方式。它也更简洁。

Spotify.playlistsearch(searchString)
  .then(val => {
    setPlaylists(val.map(element => ({
      name: element.description,
      track_count: element.tracks.total,
    })));
  } 
)});

 类似资料:
  • 问题内容: 我尝试将函数传递给子组件。当用户单击每个子组件时,将调用onclick函数。此onclick函数将写入父组件。 父组件: 子组件: 在这一行: 它说没有定义handleClick …如何解决这个问题? 感谢您的回答。 问题答案: 您需要将Agents绑定到AgentsList:这是您的代码的一个简单示例,我不得不删除一些东西,但是您明白了: http://jsfiddle.net/vh

  • 问题内容: 我已经在子组件的窗体上创建了。使用jquery ajax方法提交该表单后,我将以json格式检索一些数据。我想将该数据置于父组件的状态。那么,react.js中是否有任何方法可以将值或数据从子组件传递到其父组件? 谢谢.. 问题答案: 在没有某种Flux实现的情况下执行此操作的方法是在父元素上创建一个函数来处理来自子级的响应/数据,并将该函数作为道具传递。然后从孩子那里调用该函数。像这

  • 作为React课程的一部分,我正在制作一个虚拟电子商店,并希望将产品从一个组件的状态传递到功能组件并在那里显示产品属性。如何将数据从状态传递到无状态组件? 我设置了一个组件ProductList,它存储产品(从api获取)和ProductDetail,它应该显示详细信息(通过id找到产品并显示它的描述、img等)。我设置了一个pp.js,它有两个路由-列表和详细信息。 pp.js: Product

  • 问题内容: 我正在尝试访问DetailsPage组件中的 ID ,但无法访问它。我试过了 将参数传递给DetailsPage,但徒劳。 所以有什么想法如何将ID传递给DetailsPage吗? 问题答案: 如果要将props传递到路线内的组件,最简单的方法是利用,如下所示: 您可以使用以下内容访问道具: 将需要通过原路线的道具,否则你将只能得到内。

  • 我在使用Vue路由器将数据从一个组件传递到另一个组件时遇到问题。 我在主组件中有此模板: 在我的组件中,我有以下数据功能: 第二个链接将发送到名为的组件。 如何将数据从传递到,然后显示在那里? 谢谢

  • 我试图将类名传递给react组件以更改其样式,但似乎无法正常工作: 我试图通过传递具有各自风格的类的名称来改变药丸的风格。我是新来的,所以也许我做得不对。谢啦