<Nav/>组件中,雪佛龙<button>上的"点击事件"触发useNextTitle.js自定义挂钩中的nextTitle(length)功能.此函数设置val的值,该值由useNextTitle.js返回.如何将新的val传给App.js


更大的画面:我想在<Nav />中的"点击事件"之后,在<Dod /><Analogia />之间(在App.js中)更改显示(计算出val会有帮助,作为条件语句中的一个参数).

我试图实现的功能在我用vanilla Java Script:link完成的网站上可视化(蓝色导航,当雪佛龙点击时,将"主页"更改为"标题")

App.js

import Nav from "./components/Nav";
import Dod from "./components/Dod";
import Analogia from "./components/Analogia";

function App() {

  return (

   <div className="App">

     <Nav />

     <Dod />

     <Analogia />


   </div>
     );
}

export default App

Nav.js

import useNextTitle from './useNextTitle';
import './Nav.css';

const Nav = () => {

  const navData = [
    {id: 0, text: "DOD"},
    {id: 1, text: "analogia"}
  ]

  const length = navData.length;

  const { val, nextTitle } = useNextTitle();

  return (
    <nav>
    <div>


        {/* titles */}
        <ul>
            <li key="li1">
                {navData.map((title, index) => {
                    return (
                        <div 
                            className={index === val ? "active" : "display-none"} key={title.id}>
                            {title.text}
                        </div>
                    )
                })}
            </li>
        </ul>

        {/* chevron button */}
        <div>
            <button onClick={() => nextTitle(length)}>
                <span className="material-icons">
                    chevron_right
                </span>
            </button>
        </div>
        
    </div>
    </nav>
  )
}
export default Nav

useNextTitle.js

import { useState } from 'react';

const useNextTitle = () => {

    const [val, setVal] = useState(0);

    const nextTitle = (length) => {
        setVal(val === length -1 ? 0 : val + 1 )
        console.log("hook vav = " + val)
    }
    return { val, nextTitle }
}

export default useNextTitle;

推荐答案

useNextTitle钩子/状态向上移动到App,将valnextTitle向下移动到Nav,以切换/更新状态.使用val有条件地渲染DodAnalogia.

例子:

function App() {
  const { val, nextTitle } = useNextTitle();
  return (
    <div className="App">
      <Nav {...{ val, nextTitle }} />
      {val === 0 && <Dod />}
      {val === 1 && <Analogia />}
    </div>
  );
}

...

const Nav = ({ val, nextTitle }) => {
  const navData = [
    { id: 0, text: "DOD" },
    { id: 1, text: "analogia" }
  ];

  const length = navData.length;

  return (
    <nav>
      <div>
        {/* titles */}
        <ul>
          <li key="li1">
            {navData.map((title, index) => {
              return (
                <div
                  className={index === val ? "active" : "display-none"}
                  key={title.id}
                >
                  {title.text}
                </div>
              );
            })}
          </li>
        </ul>

        {/* chevron button */}
        <div>
          <button onClick={() => nextTitle(length)}>
            <span className="material-icons">chevron_right</span>
          </button>
        </div>
      </div>
    </nav>
  );
};

Edit passing-value-from-child-to-parent-after-click-event-in-child-which-triggers-f

Reactjs相关问答推荐

如何通过TEK查询将对象传递到Express后台

无法使用#13;或br将新行设置为文本区域'"&"<>

在一个blog函数中调用setState钩子

Reactjs中的chartjs和reaction-chartjs-2的问题

UseEffect和useSelector的奇怪问题导致无限循环

如何在与AntD的react 中限制文件上传和显示消息?

如何在REACTIVE js中动态添加或删除输入字段?

使用自动播放的视频组件呈现登录页面时出现JEST测试错误

svg每条路径上的波浪动画

获取 不能显示为 的后代.错误,但不太确定如何构建我的代码以避免此警告

ReactJS 中的图像加载顺序

当 React 中的状态发生变化时如何停止重新加载谷歌 map ?

React 测试库 - 如何断言异步函数之间的中间状态?

React js中不记名令牌中的空间问题

Redux,状态未定义

Select 建议后如何关闭 vscode 添加自动完成={}

导航到屏幕时,react 本机上下文状态变为未定义

如果 URL 已随功能组件更改,则取消刷新

如何在 React JS 上使文本中的单词可点击

如何防止 mui x-date-picker 被截断?