我告诉他我正在从组件传输事件

该子级有一个名为"添加到购物车"的事件,该事件会触发该事件并传递产品计数器.

它运行得很好,但它给了我以下警告.

react-dom.development.js:86警告:函数作为React子函数无效.如果返回组件而不是从渲染返回组件,则可能会发生这种情况.或者你是想调用这个函数而不是返回它.

你能告诉我这个错误和我做错了什么吗?从现在开始非常感激

我分享代码谢谢

ItemCount(组件子级)

import React, { useState, useContext} from 'react';
import 'materialize-css/dist/css/materialize.css';
import '../App.css';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import {faPlus, faMinus, faPowerOff} from '@fortawesome/free-solid-svg-icons';
import {contextoProducto} from './ProductContext';
import swal from 'sweetalert';


const ItemCount = ({item, stockInitial, initial = 0, onAdd}) => {

  const [contador, setContador] = useState(initial)
  const [stock, setStock] = useState(stockInitial)

  const { addProduct } = useContext(contextoProducto);

  const sumar = () => {  
    setContador(contador + 1)
    setStock(stock - 1);
    avisarStock();
  }

  const restar= () => {
    if(contador > 0){
      setContador(contador - 1);
      setStock(stock + 1);      
    }
    else
    {
      setContador(0);
    }
  }

  const reset = () =>{
    setContador(0);
    setStock(stockInitial);
  }

  const avisarStock = () => {
    if(stock > 0 ){
      
    } 
    else{
      swal('No podemos enviar su envio no hay stock', "Gracias", "error");
      setStock(0);
      setContador(contador)     
    }

  }

  const agregarAlCarrito = () => {
    onAdd(contador);
  }

  return(
    <div>
      <div className=" row left text">Stock: {stock}</div>
      <article>{contador}</article>
      <div className="buttonCount">
        <button onClick={sumar}>
          <FontAwesomeIcon icon ={faPlus}/>
        </button>
        <button onClick={restar}>
          <FontAwesomeIcon icon={faMinus}/>
        </button>
        <button onClick={reset}>
          <FontAwesomeIcon icon={faPowerOff}/>
        </button>
        <br/><h2>{avisarStock}</h2>
        <button onClick={() => addProduct({...item, quantity: contador}) ||  agregarAlCarrito()} > Agregar al carrito </button>
      </div>
    </div>
  )
}

export default ItemCount;

ItemDetail(组件父项)

import React, { useState } from "react";
import '../App.css';
import 'materialize-css/dist/css/materialize.css';
import Count from './ItemCount';
import { Link } from "react-router-dom";

export const ItemDetail = ({item}) => {  

  const [itemSell, setItemSell] = useState(false);
  
  
  const onAdd = (count) => {
    setItemSell(true);
  }
 
  return (
    <main className="itemsdetails">
      <div className="row" id= {item.id}>
        <div className="col s12 m6">
          <img src={item.image} alt="item" className="itemImg responsive-img"/>
        </div>
        <div className="col s12 m6">
          <div className="col s12">
            <h5 className="itemName">{item.title}</h5>
          </div>
          <div className="col s12">
          <p className="itemDescription">{item.description}</p>
          </div>
          <div className="col s12">
            <p className="itemPrice"> {item.price}</p>
          </div>
          <div className="col s12">
            {
              itemSell ? <Link to="/cart"><button className="waves-effect waves-light btn-large">Finalizar Compra</button></Link> : <Count item= {item} stockInitial={item.stock} onAdd= { onAdd } />
            }
          </div>
        </div>
      </div>
    </main> 
  )
};

export default ItemDetail;

推荐答案

<br/><h2>{avisarStock}</h2>

在这里,您试图渲染组件,但实际上avisarStock是一个设置状态并打开alert 的函数.try 渲染此函数没有任何意义.

看起来您打算渲染stock而不是avisarStock.这将在<h2>中显示您的库存状态:

<br/><h2>{stock}</h2>

Javascript相关问答推荐

没有输出到带有chrome.Devtools扩展的控制台

使搜索栏更改语言

如何在不创建新键的情况下动态更改 map 中的项目?

PrivateRoute不是路由组件错误

在网页上添加谷歌亵渎词

在286之后恢复轮询

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

覆盖TypeScrip中的Lit-Element子类的属性类型

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

如何将innerHTML字符串修剪为其中的特定元素?

Use Location位置成员在HashRouter内为空

如何在.NET Core中将chtml文件链接到Java脚本文件?

在Vercel中部署Next.js项目时获取`ReferenceError:未定义文档`

使用可配置项目创建网格

在高位图中显示每个y轴系列的多个值

将延迟加载的模块转换为Eager 加载的模块

输入数据覆盖JSON文件

需要从对象生成列表

从客户端更新MongoDB数据库