我正在使用react-router v4
。我感到困惑的是,当我单击<Link>
组件时,路线会立即更改。我想在获取数据之前停留在当前路线,而不是先切换路线再获取数据。我发现其中react- router v3
有一个onEnter
钩子,但现在在中react-router v4
,它已被弃用。那么,如何在单击<Link>
组件之后以及更改路线之前立即获取数据?
例:
它是:在A
->单击<Link> to B
->获取数据以进行B
->渲染B
不:在A
->单击<Link> to B
->渲染Route B
->获取数据B
->重新渲染B
在中react-router v4
,您可以使用render
prop Route
来替换其中onEnter
现有的功能react-router v3
假设您有一条类似的路线 react-router v3
<Route path="/" component={Home} onEnter={getData} />
这的等效react-router v4
会
<Route exact path="/" render= {() => {getData(); return <Home data={this.state.data}/>}} />
但是,建议的方法是利用中的lifecycle
方法component
。
在 Github讨论中 :
We have no lifecycle hooks that receive props on initial render.
我们不再有“路线生命周期”。相反,由于
<Match>
组件是真实组件(不是像s这样的伪组件),因此它们可以参与React的生命周期,这意味着它们可以使用componentWillMount
。
因此,建议的解决方案之一是:
v4只是关于路由的组成部分。这意味着要利用生命周期方法。
componentWillMount() { // or componentDidMount fetch(this.props.match.params.id) } componentWillReceiveProps(nextProps) { // or componentDidUpdate if (nextProps.match.params.id !== this.props.match.params.id) { fetch(nextProps.match.params.id) } }
问题内容: 在某些示例中,我看到了类似以下内容: 这些到底在做什么?它们是必备品吗? 问题答案: 正如finalFreq所指出的,我已经纠正了!“提供的示例将在React的未来版本中正常工作。不赞成使用React的方法,直接调用proptypes函数,但对组件进行注释将在当前和将来的版本中正常工作。” 如果您只是在JS中学习类型,我建议使用流程类型 ,它可以在构建时而不是在运行时使用。这在编辑器中
在绝大多数情况下, React都是清晰直观的. 但是也不乏有一些小陷阱, 不注意的话有时候也会给你”意外的惊喜”. 下面我们就来介绍一下这些小陷阱 参考资料 React Gotchas Top 5 React Gotchas
在这一个章节中我们会提供一些CSS In JS的实践. 如果你还不太明白为什么要CSS In Js, 作者vasan推荐你看一看下面的 talk by Vjeux 相关文章 Patterns for style composition in React Inline style vs stylesheet performance
问题内容: 对于事件处理程序,可以在react中使用闭包吗?例如,我在导航中有一些功能和很多菜单,在导航组件中我使用的是这样的: 还是我应该只喜欢箭头功能? 第一个变种确实使代码更清洁,但是我担心大量此类元素的性能 问题答案: 两者都应避免。 虽然它们都可以工作,但是它们都具有相同的弱点,即它们会导致不必要的渲染,因为该函数是动态创建的,因此将呈现为不同的对象。 您不希望使用任何一种方法,而是要以
问题内容: 我创建了该组件,当我转到一个不存在的页面时,它可以正常工作。但是,它出现在我的所有页面中的是同一页面,而不仅仅是不存在的页面。这是组件: 这就是我在主页中使用它的方式: 如您所见,我曾经用来创建404页面,但是该组件也出现在每个现有页面中。我怎样才能解决这个问题? 问题答案: 试试这个:
我使用了react datepicker。我试图从另一个组件作为props收到的值中设置react datepicker的值,但要么它没有显示该值,要么它显示了一个空白页面,显示“错误的时间格式”。 日期选取器代码: 我检查了控制台,发现日期选择器组件成功接收了props,但我仍然无法设置该值。
`` [ {“Example1”:“503987964457159371”,“Sports”:“Box”,“AppName”:“Admin”,“Description”:“Boxing”},{“Example1”:“902867793529808056”,“Sports”:“KickBox”,“AppName”:“Admin”,“Description”:“KickBoxing”},{“Examp
React在处理事件(event时), 事实上使用了SyntheticEvent对象包裹了原生的event对象. 这些React自己维护的对象是相互联系的, 意味着如果对于某一个事件, 我们给出了对应的响应函数(handler), 其他的SyntheticEvent对象也是可以重用的.这也是React提升性能的秘诀之一. 但是这也意味着, 如果想要通过异步的方式访问事件对象是不可能的, 因为出于r