javascript - 我无法在 ReactJS 中将值从子组件传递给父组件(功能组件)
问题描述
我正在尝试使用 ReactJS 构建一个电子商务网站(没有任何后端或服务器)。
我总共有 4 个组件:
- 导航栏.jsx
- 主页.jsx
- 产品.jsx
- 购物车.jsx
**我想要的是,当用户单击products.jsx 中的“添加到购物车”按钮时,购物车编号应显示在导航栏右上角但不显示。
我尝试了什么:我只是将道具从 Products.jsx 页面传递到 Navbar.jsx 但它不起作用。我尝试了很多,但无法做到..请帮助我...在此先感谢
[只熟悉功能组件]**
代码:Navbar.jsx
import React from 'react'
import { Link } from 'react-router-dom'
function Navbar(props) {
return (
<div>
<div className="d-flex bg-primary flex-row justify-content-between text-light ">
<div className="left d-flex">
<li className="my-2"><Link className="text-light p-3 py-2" to="/">HOME</Link></li>
<li className="my-2"><Link className="text-light p-3 py-2" to="/products">PRODUCTS</Link></li>
<li className="my-2"><Link className="text-light p-3 py-2" to="/cart">CART</Link></li>
</div>
<div className="right">
<p>CART is:</p><p className="mx-2 h3">{props.text}</p>
{/* I WANT TO DISPLAY THE CART ABOVE HERE */}
</div>
</div>
</div>
)
}
export default Navbar
代码:Products.jsx
import React, { useState } from 'react'
import Router from '../Router';
import Navbar from './Navbar';
function Products() {
return (
<div>
<h1>PRODUCTS</h1>
<button className="btn btn-success">ADD TO CART</button>
{/* WHEN I CLICK ON ADD TO CART, CART NUMBER SHOULD UPDATED IN NAVBAR */}
</div>
)
}
export default Products
代码:Router.jsx
import React from 'react'
import {
BrowserRouter,
Switch,
Route,
Link
} from "react-router-dom";
import Home from './components/Home';
import Navbar from './components/Navbar';
import Products from './components/Products';
import Cart from './components/Cart';
function router() {
return (
<>
<BrowserRouter>
{/* <Navbar text="3"/> */}
<Navbar/>
<Switch>
<Route exact path='/' component={Home}/>
<Route exact path='/cart' component={Cart}/>
<Route exact path="/products" component={Products}/>
</Switch>
</BrowserRouter>
</>
)
}
export default router
代码:index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Home from './components/Home';
import Navbar from './components/Navbar';
import Products from './components/Products';
import './index.css';
import {
BrowserRouter,
Switch,
Route,
Link
} from "react-router-dom";
import Router from './Router';
ReactDOM.render(
<Router />
,
document.getElementById('root')
);
文件夹结构: 文件夹结构
请帮助我...提前致谢
解决方案
您必须做的是在单击按钮时将要显示在购物车中的值从产品页面转移到导航栏。
Navbar 和 Products 组件都有一个共享的父级;路由器.jsx。这意味着您的值必须通过“回调”从 Navbar.jsx 上升到 Router.jsx 中的状态。然后状态将作为导航栏的道具。
遵循该方法将允许您动态更新。总结;您只需要路由器中的 1 个状态,以及导航栏中的 1 个作为概率的回调,它会更新路由器中的状态。
推荐阅读
- bash - Bash 数组无法提供预期长度
- python - 熊猫数据框中的拆分值
- javascript - este.parentElement.parentElement.children.tags 不是函数
- .net-core - .NET Core 3.1 Web 会话超时
- jquery - 剑道网格多选下拉自定义过滤器持久状态不起作用
- javascript - 根据参数按 2 列分组并合计
- android - 如何压缩从科特林画廊挑选的照片
- c++ - 这种语法叫什么?是标准C吗?它是标准的 C++ 吗?
- python - Python在添加到不同对象时填充自身对象
- sql - SQL Server - 从位置到字符串结尾的子字符串