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

如何在useState钩子中导出状态并在其他组件中使用它

宓昂雄
2023-03-14

所以我创建了一个电影数据库应用程序,我想在不同的类别之间切换,如顶级流行等。我试图通过将状态设置为任何点击的文本值,稍后将用于形成完整的网址来获取。

这是我的代码

App。js

import Movie from "./components/Movie";
import requests from "./components/ApiRequest";
import Navbar from "./components/Navbar";

function App() {

  return (
    <div className="App">
      <Navbar />
      <div className="movie-container">
        <Movie fetchUrl={requests.fetchTrending} />
      </div>
        
    </div>
  );
}

export default App;

Navbar。js

import React, { useState } from 'react'
import SearchBar from './SearchBar'
import { FiFilter } from 'react-icons/fi'
import requests from "../components/ApiRequest";


const Navbar = () => {
    const [category, setCategory] = useState('Trending')

    return (
        <div className="navbar-container">
            <button className="navbar-btn"><FiFilter />Filter</button>
            <div className="categories">
                <button onClick={() => setCategory("Trending")}>Trending</button>
                <button onClick={() => setCategory("Popular")}>Popular</button>
                <button onClick={() => setCategory("TopRated")}>Top Rated</button>
                <button onClick={() => setCategory("Upcoming")}>Upcoming</button>
            </div>
            <SearchBar />
        </div>
    )   
}

所以我想从Navbar获取category的值。js在函数外部,并在此处使用它


共有2个答案

罗安宁
2023-03-14

你需要提升你的状态。这意味着你的useState类别钩子必须在父组件中,父组件可以将此数据作为道具传递给子组件。在你的情况下,电影组件的父组件是应用组件,所以应用组件必须包含

const [category, setCategory] = useState('Trending')

现在,您可以将“类别”道具传递给电影组件,并将“类别”设置为导航栏组件

严阳成
2023-03-14

您应该将状态提升到一个共同的祖先,即在这种情况下的App,在那里它可以作为道具传递给子组件。

例子:

function App() {
  const [category, setCategory] = useState('Trending');

  return (
    <div className="App">
      <Navbar setCategory={setCategory}/>
      <div className="movie-container">
        <Movie fetchUrl={requests.fetchTrending(category)} />
      </div>
        
    </div>
  );
}

...

const Navbar = ({ setCategory }) => {
  return (
    <div className="navbar-container">
      <button className="navbar-btn"><FiFilter />Filter</button>
      <div className="categories">
        <button onClick={() => setCategory("Trending")}>Trending</button>
        <button onClick={() => setCategory("Popular")}>Popular</button>
        <button onClick={() => setCategory("TopRated")}>Top Rated</button>
        <button onClick={() => setCategory("Upcoming")}>Upcoming</button>
      </div>
      <SearchBar />
    </div>
  )   
}
 类似资料:
  • 我正在尝试将钩子{count,setCount}=useState(0)导出到另一个函数,以便能够获取{count}值。我的应用程序是通过添加项目来制作一个简单的清单,然后当按下提交按钮时,获取该清单的渲染。 以下是我的库存对象列表: 最好的方法是将我的钩子移动到应用程序函数中,但是增加或减少{计数}会影响我的所有项目。 在运行函数displayOrder时,是否仍要为每个项呈现{count}?

  • 本文向大家介绍在React.js中使用useState钩子,包括了在React.js中使用useState钩子的使用技巧和注意事项,需要的朋友参考一下 钩子允许功能组件在反应中获得基于类的组件中可用的特性,从而使它们更加强大。 useState,我们将从react导入。从'react'导入{useState}; 这有助于我们为功能组件创建局部状态变量,并提供更新该变量的方法。 类中的状态是一个对象

  • 我试图在react with typescript中创建一个登录表单。但setEmail方法不接受该值。它表示“string”类型的参数不能分配给“SetStateAction”类型的参数。我该怎么解决它?

  • 问题内容: 我正在React中尝试新的Hook功能。考虑到我有以下两个组件(使用React Hooks)- Hooks声称要解决在组件之间共享有状态逻辑的问题,但是我发现和之间的状态不可共享。例如,in 的更改不会导致in的更改。 使用挂钩可以在组件之间共享状态吗? 问题答案: 如果您指的是组件状态,则挂钩将无法帮助您在组件之间共享它。组件状态是组件本地的。如果您的州生活在上下文中,那么钩子会有所

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件:

  • 问题内容: 我发现React Hooks文档的这两部分有些令人困惑。使用状态挂钩更新状态对象的最佳实践是哪一种? 想象一下要进行以下状态更新: 选项1 从使用React Hook的文章中,我们可以做到: 所以我可以做: 然后: 选项2 从钩子参考中我们可以得出: 与类组件中的setState方法不同,useState不会自动合并更新对象。您可以通过将函数更新程序形式与对象传播语法结合使用来复制此行