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

React组件未正确返回简单控制台日志[重复]

须旭
2023-03-14

我是新手,所以如果我似乎不理解一些明显的概念,请耐心等待,但我编写了一个配置文件日志函数,配置文件的结构如下:

{身份证: 1,姓名:约翰·史密斯,年龄: 27,身高: 186厘米,性别:男}

我正在设计一个react函数(用于学习),它可以对配置文件进行排序、添加、删除和修改。

要编辑我使用钩子的配置文件。然后我使用钩子函数作为组件内部的道具。

我调用一个“Header”函数,它使用一个“PrintOut”函数,该函数显示DOM上的每个配置文件以及一个delete、edit和Change-gender按钮。

它还需要3个道具,配置文件状态,删除功能和切换(性别变化)功能。性别变更功能是点击启动的,目前,它所要做的只是控制台日志“你点击了性别变更功能”和ID。

而不是这样做,控制台只是记录每个配置文件的句子,而无需单击。当我点击“改变性别”按钮时,什么也没发生。

我想知道为什么会出现这种情况,我能做些什么来解决它?

这是密码

应用程序。js

import "./styles.css";
import Header from "./component/Header";
import Buttons from "./component/Buttons";
import { useState } from "react";
 
export default function App() {
 const [names, assortNames] = useState([
   {
     id: 1,
     name: "John",
     age: 18,
     height: 184,
     gender: "male"
   },
   {
     id: 2,
     name: "Billy",
     age: 24,
     height: 191,
     gender: "male"
   },
   {
     id: 3,
     name: "Sara",
     age: 26,
     height: 171,
     gender: "female"
   },
   {
     id: 4,
     name: "Ryan",
     height: 186,
     age: 27,
     gender: "male"
   }
 ]);
 
 const AgeFilter = () => {
   assortNames(
     [...names].sort((a, b) => {
       return b.age - a.age;
     })
   );
 };
 
 const nameFilter = () => {
   assortNames([...names].sort((a, b) => a.name.localeCompare(b.name)));
 };
 const heightFilter = () => {
   assortNames(
     [...names].sort((a, b) => {
       return b.height - a.height;
     })
   );
 };
 
 const DeleteName = (id) => {
   assortNames(names.filter((names) => names.id !== id));
 };
 
 const GenderChange = (id) => {


 console.log('You clicked gender change function', id)
 };
 
 return (
   <div className="container">
     <Buttons
       list={names}
       Age={AgeFilter}
       Name={nameFilter}
       Height={heightFilter}
     />
     <Header namez={names} functs={DeleteName} Toggler={GenderChange} />
   </div>
 );
}

Header.js

import PrintOut from "./PrintOut";
 
const Header = ({ namez, functs, Toggler }) => {
 return (
   <>
     {namez.map((name) => (
       <PrintOut key={namez.id} name={name} onDelete={functs} onToggle ={Toggler} />
     ))}
   </>
 );
};
 
export default Header;

打印输出。js

const PrintOut = ({ name, onDelete, onToggle }) => {
  const Deleter = (id) => {
    onDelete(name.id);
  };

  return (
    <div className={name.gender === "male" ? "male" : "female"} key={name.id}>
      <h3>{name.name}</h3>
      <div className="Age-and-Height">
        <p> {name.age}</p>

        <h4> {name.height} cm</h4>
      </div>
      <button className="btn btn-delete" onClick={() => Deleter(name.id)}>
        Delete
      </button>
      <button className="btn btn-edit">Edit</button>
      <button className="btn " onClick={onToggle(name.id)}>
        Change Gender
      </button>
    </div>
  );
};

export default PrintOut;

Buttons.js

const Buttons = ({ list, Age, Name, Height }) => {
  return (
    <>
      <div className="buttons">
        <button className="btn" onClick={Age}>
          AgeSort
        </button>
        <button className="btn" onClick ={Height}>HeightSort</button>
        <button className="btn" onClick ={Name}>NameSort</button>
        <button className="btn btn-add" >Add</button>
      </div>
    </>
  );
 };
  
 export default Buttons;

共有2个答案

相俊迈
2023-03-14

你没有传递id那个函数

Toggler={() => GenderChange(id)}
傅皓君
2023-03-14

在这里,您可以在呈现函数时直接调用该函数:

<button className="btn " onClick={onToggle(name.id)}>
    Change Gender
</button>

因此,您需要将其更改为回调函数:

<button className="btn " onClick={() => onToggle(id)}>
     Change Gender
</button>

还将id添加到子组件中

 类似资料:
  • 我已经创建了一个对我来说很好的Webpack构建——它有一个用于热重新加载的dev服务器,还有一个运行模板html文件并集成文件。 这一切都很好,但当我在我的开发服务器上工作时,控制台会给我如下错误消息: 它引用了是错误的来源,而不是我正在使用的组件,这使得很难追踪错误的来源。 据控制台所知,我知道它是包含错误的文件,但如何让控制台记录预绑定代码?(例如,) 提前感谢。

  • 嘿,我想知道控制台中的输出是否可能与文件输出中的输出相同。 这是我的XML配置。 滚动文件中的输出 在控制台中为空。但是现在如果我改变 到"追踪" 将是2,4,6。。。。在控制台和我的文件中,它将是1,3,5,7。。。这很容易理解。 但是我的问题是,我们如何在控制台和文件中同时拥有相同的日志级(跟踪)输出?(添加包名称和级别的标签不起作用) 与此问题相关: log4j2 xml配置-登录到文件和控

  • 问题内容: 我想在量角器测试中输出div的文本,到目前为止,我有: 但这输出 我尝试了“ toString()”,结果相同。 有没有办法将文本输出到控制台? 问题答案: 和其他大多数量角器方法都返回承诺。您想将您的陈述放入承诺解决方案中: 使用新的量角器语法:

  • Laravel中是否有类似的东西允许您查看正在执行的实际SQL?例如,在Rails中,您可以在控制台中看到SQL。在Django中,您有一个工具栏。 在《拉威尔4》中有类似的东西吗? 澄清一下:我的问题是如何在没有代码的情况下做到这一点。Laravel中是否有内置的东西不需要我在应用程序中编写代码? 更新:最好我也希望看到CLI查询(例如)

  • 问题内容: 通过使用reactjs后挂机,不返回此状态下的电流值,我该如何处理呢? 这是这种情况的代码,尝试找出控制台日志的显示内容。 问题答案: 默认情况下,只做一件事,只做一件事,设置新状态并导致函数重新呈现。它本质上是异步的,因此默认情况下,通常在它运行之后运行的方法。 从您的示例中,在页面的全新加载中,键入’s’导致useState更改状态,但是由于它是异步的,因此将使用旧的状态值来调用,

  • 本文向大家介绍C#控制台程序使用Log4net日志组件详解,包括了C#控制台程序使用Log4net日志组件详解的使用技巧和注意事项,需要的朋友参考一下 C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下 1、Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比如C#控制台程序和C# MVCWeb项目,拿控制台项目为例 项目源码在文章底部 2、首先创建一个控制台程序