将数据从一个路由器(组件)传递到另一个

时间:2019-10-14 18:56:56

标签: reactjs react-router-v4

试图将数据从<Route exact path="/" render={()=><Home addToCart={(book)=>{addToCart(book)}}/>}></Route>传递到<Route path="/cart" render={()=><Cart addToCart={cartItem}/>}></Route>

问题:

  1. 购物车(render={()=><Cart addToCart={cartItem}/>)收到null,但没有收到我要发送的对象

已放置“ console.log ...”以帮助调试,请查看代码

import React from 'react';
import classes from './Nav.module.css';
import { Route, NavLink, Switch } from 'react-router-dom';
import Home from '../Home/Home';
import Cart from '../Cart/Cart';

var cartItem = null;

let addToCart = (book)=>{
  cartItem = book;
  console.log('1. Displays the correct object', cartItem);
}
const nav = ()=>{
  return (
    <div>
      <div className={classes.MenuContainer}>
        <div className={classes.Menu}>
          <div><NavLink to="/">Home</NavLink></div>
          <div><NavLink to="/cart">Cart</NavLink></div>
        </div>
      </div>
      <Switch>
        <Route exact path="/" render={()=><Home addToCart={(book)=>{addToCart(book)}}/>}></Route>
        <Route path="/cart" render={()=><Cart addToCart={cartItem}/>}></Route>
        {console.log('2. Displays null', cartItem)}
      </Switch>
    </div>
  );
} 

export default nav;

2 个答案:

答案 0 :(得分:2)

如上所述,Redux将是一个很好的解决方案。

另一种选择是让父组件管理状态,然后将状态传递给两个子对象。

答案 1 :(得分:1)

如果要在相同级别的React组件之间传递数据,则需要使用redux之类的东西。