当我单击一个链接时,如何更改另一个组件的状态?

Posted

技术标签:

【中文标题】当我单击一个链接时,如何更改另一个组件的状态?【英文标题】:When I click on a link, how can I change the status of another component? 【发布时间】:2019-12-29 13:47:25 【问题描述】:

当我单击一个按钮时,它会将我重定向到另一个组件 (#2),其中有两种状态,并根据哪种状态显示一种或另一种内容。组件(#2)的默认状态是 true,我需要知道如何做的是单击组件(#1)的按钮将状态更改为 false。

这是一个 ReactJs 应用程序,我使用函数组件,钩子,没有类组件

Thats the button code:
<Link to="/register">
<button className="btn btn-success btnVerde">
</button>
</Link>

Thats the component#2:
const [state, setState] = React.useState(true);
state && <div1......../>
!state && <div2......./>

我希望单击组件#1 中的按钮,它会重定向到组件#2,默认状态如何为 true,然后将其更改为 false

【问题讨论】:

【参考方案1】:

您可以处理 Component1 中的状态,并在您的 onClick 调用 setState 中使用相反的值更新值,如下所示:

<button onClick=() => setState(state: !state)>Click</button>

并在component2中将值作为prop接收,例如:

const Component2 = (showCustom) => showCustom ? <span> Custom </span> : <span>No Custom</span>;

【讨论】:

您好,感谢您的想法,它帮助我找到了解决方案,与您不完全一样,但方式相同。我正在使用 redux 和 typescript,所以我必须创建、键入、操作、接口和 reducer 才能将状态保存在 redux 中,稍后将在第二个组件上使用。所以在 compnent#1 我做了: const change = () => props.changeState(false);并在组件#2 useEffect(() => if(props.booleanState) showCompanyRegister() else showTalentRegister() , []);【参考方案2】:

感谢@rcoro,这就是我解决问题组件#1 的方法:

const change = () => props.changingState(false);
<Link to="/register"><button onClick=changeclassName="btnPink">
         t("talents_btnReserve")
        </button>
        </Link>

组件#2:

const showTalentRegister = () => setState(true);
const showCompanyRegister = () => setState(false);

useEffect(() => 
if(props.booleanState)
  showCompanyRegister()

else 
  showTalentRegister()

, []);

【讨论】:

以上是关于当我单击一个链接时,如何更改另一个组件的状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确更新反应钩子状态中的数组

React 不会在路由参数更改或查询更改时重新加载组件数据

如何在iphone中更改下一个视图之前突出显示按钮?

ember.js 从另一个视图更改视图

在 React 中单击组件外部时更改状态

如何通过单击按钮更改另一个对象的动画?