单击 <Link /> 设置 localStorage - Reactjs

Setting localStorage on click of <Link /> - Reactjs

我正在尝试一些幼稚的东西,但它毕竟应该有效。

我必须在我的页面中添加链接。

<Link to="/detail" className="table-details-btn" onClick={this.addlocalid('J8')}></Link>
<Link to="/detail" className="table-details-btn" onClick={this.addlocalid('E8')}></Link>

然后单击我想按给定值设置 localStorage。例如J8, E8

addlocalid(localid){
  console.log("Setting VUID To:"+localid);
  localStorage.setItem('vuserid', localid);
}

但它控制台显示:

Setting VUID To:J8
Setting VUID To:E8
Setting VUID To:J8
Setting VUID To:E8

为什么是设置值的4倍?存储在 localStorage 中的最终值为 E8

onClick 需要一个函数,而不是函数的结果。 当您通过 onClick={howOldIs(tony)} 时,您实际上是在通过 onClick={32}。你需要传递 onClick={howOldIs},告诉 React 它需要调用什么。 当您传递 onClick={howOldIs(tony)} 时,将在页面加载时评估函数,因此您将获得所有 4 console.logs.

问题是,您不能真正以这种方式传递参数,因此您可以通过传递一个匿名内联函数来帮助自己,该函数使用您指定的参数调用原始函数。 onClick={() => {howOldIs(tony)}.

另一个简单时代的例子:

myButton.addEventListener('click', howOldIs(tony));

没有做您可能想做的事情(除非 howOldIs 本身返回一个函数)。所以你必须做:

myButton.addEventListener('click', howOldIs);

或者,如果您需要传递参数:

myButton.addEventListener('click', () => {howOldIs(tony)});

希望这个解释能帮到你。