在React router中,我必须单击和onClick属性,如下所示
<li key={i}><Link to="/about" onClick={() => props.selectName(name)}>{name}</Link></li>
state = {
selectedName: ''
};
selectName = (name) => {
setTimeout(function(){this.setState({selectedName:name});}.bind(this),1000);
// this.setState({selectedName: name});
}
当我给超时内嵌函数调用点击,其导航到新页面,并在某个时候状态得到更新,导致显示以前的名称,直到状态更新为新名称。
是否有一种方法,只有在onClick函数中的代码执行之后,它才会导航到新路由。
您可以[在这里]获取整个代码(https://github.com/pushkalb123/basic-react-router/blob/master/src/App.js)
或者,我建议使用URL参数来捕获about页面所涉及的人的姓名。因此,url不是/about,名称不是幕后的,而是/about/tom或/about/pushkal。执行此操作的方法是在URL路由器中定义参数,例如在index.js中:
<Route path="/about/:name" component={AboutPage}>
现在,当您链接到“关于”页面时,您可以这样做:
<Link to={"/about/" + name}>{name}</Link>
现在,在AboutPage组件中,您可以在this.props.params.name
中作为prop访问name参数。你可以在这里看更多的例子。
这种方法与您当前的方法有点不同,但我怀疑它以后会导致更容易的设计
一种可能的方法是,不要使用Link
,而是使用history.push
来动态更改路由。要实现这一点,请删除Link
组件,并在li
上定义onClark
事件。现在,首先执行所有任务内on点击
函数,并在最后使用history.push
更改路线意味着在其他页面上导航。
在您的情况下,更改setState
回调函数中的路由器,以确保它仅在状态更改后发生。
这样写:
<li key={i} onClick={() => props.selectName(name)}> {name} </li>
selectName = (name) => {
this.setState({ selectedName:name }, () => {
this.props.history.push('about');
});
}
检查以下答案:
何时使用setState回调
如何使用react路由器dom进行动态导航
问题内容: 我正在使用reactjs路由器中的Link组件,但无法使onClickevent运行。这是代码: 这是做这件事的方式还是另一种方式? 问题答案: 您以字符串形式传递,也意味着立即执行。 尝试
问题内容: 我有两个 java类 和 两个 类的 两个布局 。每个 布局 中都有一个 按钮 。这两类都在扩展。现在在第一个布局中,我使用了 包含这样的 标签 我现在可以看到 两个按钮, 但是 第二个按钮 不起作用。 问题答案: 首先, 您必须声明并初始化 包含 视图,然后使用 view.findViewById() 方法进行贴花和初始化两个按钮,如下所示: 然后设置他们的 onClickListe
我在div标签中有一个段落和一个按钮。我想在div标记上使用onlick=“”方法,而不是在div标记内的按钮上。我怎么能这么做。
问题内容: 我有这个功能,当我点击标签时,我想调用两个功能,一个来自父组件的props的处理程序功能,还有这个功能 如何调用这两个函数?这是父组件的处理函数 问题答案: 这样写: 或创建一个函数,将其用作单击处理程序。在该函数内部调用其他两个函数,如下所示: 请参阅使用箭头功能的两种方法: 1-简洁的机身: 2块体 在内部的程序块主体(函数的主体)中,我们可以执行任意数量的任务。 像这样:
我正在使用JSF 2.0创建页面: 我期待在单击复选框时被调用。但是,加载页面时调用一次setMyCheckboxValue()。 如果我写 每次点击都会收到警报。 我的问题是:当我收到警报时,为什么每次onclick事件都不调用? 注意:我也尝试过AJAX,但复选框保持不变。
问题内容: 我有一个叫做React的组件,有很多子组件(另一个React组件)。我希望能够从内部对每个事件声明一个事件。我尝试执行以下操作: 不用说,我没有得到任何“点击!” 出现在我的控制台中 Chrome中的React检查器会指示事件已注册,并应使用上述功能体进行注册。 因此,我得出结论,我无法在实际标签上注册事件(不过,我不确定为什么会这样)。我如何才能实现这一目标呢? 问题答案: 这取决于