- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请注意:这是一个非常奇怪的问题。我会尽力清楚地解释这个问题。这是在我的ReactJs
应用程序中使用React Router
发生的。
我有一些组件需要来自URL的某种类型的参数。我也有不依赖参数的组件。
如果我转到而不是需要任何参数的组件,则没有任何问题。
因此,我先转到Home
,然后转到Account List
,这两个参数都不需要任何参数,我可以根据需要来回多次,没有问题。
但是,如果我转到使用参数的组件,然后尝试转到另一个使用参数的组件,则会收到错误消息。该错误表明应该正确加载组件react-router
并没有正确安装,这引发了一个错误,告诉我子组件所需的数据丢失。我遇到的错误非常简单。他们只是说:
this.props.something is required but undefined
App.jsx
中的路线:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { Route, Switch, withRouter } from 'react-router-dom';
// Import components here
// Just showing one for brevity
import Home from '../components/home/Home';
import * as appActions from '../actions/app-actions';
class App extends Component {
constructor(props) {
super(props);
}
render() {
return(
<div>
<Switch>
<Route exact path="/member" component={Home} />
<Route exact path="/member/accounts" component={Accounts} />
<Route exact path="/member/projects" component={ProjectsList} />
<Route path="/member/projects/profile/:id" component={ProjectProfile} />|
<Route exact path="/member/tasks" component={TasksList} />
<Route path="/member/tasks/profile/:id" component={TaskProfile} />
</Switch>
</div>
);
}
}
function mapStateToProps(state) {
return {
member: state.member.memberData
}
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(appActions, dispatch)
};
}
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App));
ProjectProfile
和
TaskProfile
组件都需要ID。此外,
ProjectProfile
和
TaskProfile
组件都是相当简单的父组件,它们执行以下两项操作:
componentDidMount()
事件ProjectProfile
组件,而
TaskProfile
与此几乎相同。
import React, { Component } from 'react'
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
// Actions
import * as projectProfileActions from '../../../actions/project-profile-actions';
// Components
import Desktop from './ProjectProfileDesktop';
import Mobile from './ProjectProfileMobile';
class ProjectProfile extends Component {
constructor(props) {
super(props);
};
componentDidMount() {
const id = this.props.match.params.id;
this.props.actions.getData(id);
}
render() {
return (
<div className="height-100 width-100">
<div className="height-100 width-100 row row-clean">
{this.props.ui.isDesktop || this.props.ui.isTablet ? <Desktop />
: this.props.ui.isMobile ? <Mobile />
: null}
</div>
</div>
);
}
}
function mapStateToProps(state) {
return {
ui: state.app.window
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(projectProfileActions, dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(ProjectProfile);
ProjectProfile
和任何其他组件之间来回移动,并且远离
TaskProfile
,则不会有问题。我什至可以用不同的ID命中
ProjectProfile
,并且一切正常。仅当我使用参数转到另一个组件
时,所有操作均会失败。我可以使用TaskProfile
做同样的事情。我可以用不同的ID继续打TaskProfile
,或者在TaskProfile
和任何组件之间来回切换,而无需使用一个参数,一切正常。ProjectProfile
,然后再尝试去TaskProfile
或反之亦然时,才会发生错误。ProjectProfileDesktop
所需的数据。componentDidMount()
方法。看来render()
方法中的某些问题导致了问题,并阻止了它进入componentDidMount()
。我不确定是什么问题,因为我没有收到任何错误。我将debugger
放在render()
方法的顶部。尽管我没有看到确切的错误,但流程显示出确实有问题。withRouter
。我已经看到一些涉及withRouter
的问题,但是到目前为止,我仍然找不到任何具体的问题。App
组件。不知道这是否也在此问题中起作用。这是render()
在我的index.js
中的样子:render(
<Provider store={store}>
<BrowserRouter history={browserHistory}>
<StripeProvider apiKey="my_key">
<App />
</StripeProvider>
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
render()
方法,并且在第一个createElement
之后立即执行了代码,代码跳到了ReactInstrumentation.debugTool.onBeginLifeCycleTimer
-请参见下面的屏幕截图。react-router
引起的,因为我将所需的ID硬编码到组件中,因此我不依赖react-router
或其他任何东西来获取它。/:id
和TaskProfile
组件的路由中删除了ProjectProfile
参数。componentDidMount()
方法的调用。我还尝试了componentDidUpdate()
来查看它是否被调用,但不是。我在两个组件中都放置了componentWillUnmount()
,当我在应用程序中的其他位置导航时,两个组件中都调用了componentWillUnmount()
,因此人们可能会认为这两个组件都无法卸载。render()
方法中的某些内容阻止了componentDidMount()
或任何其他生命周期方法的调用,但这仅在这种特定情况下才发生。最佳答案
一个多星期以来,我一直在这个问题上犹豫不决,终于解决了。诚然,我认为我理解的许多概念在此过程中变得更加清晰。
该错误是由于我处理“isLoading”动画逻辑的逻辑错误所致-是的,如此简单而愚蠢!!!
我真正想在这里分享的是我为以后可能会遇到类似行为的每个人吸取的教训。
componentDidMount()
。即使您来回加载相同的组件。但是只有在首先卸载组件时,您才打componentDidMount()
。如果未卸载该组件,则在以后使用该组件时,您将不会命中componentDidMount()
。因此,请仔细查看您的逻辑,以查看离开组件后是否卸下了组件。我认为,查看是否发生这种情况的最简单方法是在其中添加componentWillUnmount()
的debugger
方法。如果在离开组件时单击此方法,则意味着它正在卸载。 componentDidMount()
仍然是进行此操作的最佳位置。话虽如此,您可能需要在componentDidMount()
中添加其他逻辑以确保您不会进行任何不必要的API调用,因为您的数据可能仍在您的商店中。 componentWillReceiveProps()
方法进行我的API调用以获取数据。这是不好的建议!实际上,不赞成使用componentWillReceiveProps()
,componentWillUpdate()
和componentWillMount()
方法,因此出于两个原因,我们不应该使用它们:将来的兼容性和遵循最佳实践。以下是有关为何不推荐使用它们的更多信息:https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html 关于javascript - componentDidMount()不会被调用,而只会在特定情况下被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50827695/
尝试使用集成到 QTCreator 的表单编辑器,但即使我将插件放入 QtCreator.app/Contents/MacOS/designer 也不会显示。不过,相同的 dylib 文件确实适用于独
在此代码示例中。 “this.method2();”之后会读到什么?在返回returnedValue之前会跳转到method2()吗? public int method1(int returnedV
我的项目有通过gradle配置的依赖项。我想添加以下依赖项: compile group: 'org.restlet.jse', name: 'org.restlet.ext.apispark', v
我将把我们基于 Windows 的客户管理软件移植到基于 Web 的软件。我发现 polymer 可能是一种选择。 但是,对于我们的使用,我们找不到 polymer 组件具有表格 View 、下拉菜单
我的项目文件夹 Project 中有一个文件夹,比如 ED 文件夹,当我在 Eclipse 中指定在哪里查找我写入的文件时 File file = new File("ED/text.txt"); e
这是奇怪的事情,这个有效: $('#box').css({"backgroundPosition": "0px 250px"}); 但这不起作用,它只是不改变位置: $('#box').animate
这个问题在这里已经有了答案: Why does OR 0 round numbers in Javascript? (3 个答案) 关闭 5 年前。 Mozilla JavaScript Guide
这个问题在这里已经有了答案: Is the function strcmpi in the C standard libary of ISO? (3 个答案) 关闭 8 年前。 我有一个问题,为什么
我目前使用的是共享主机方案,我不确定它使用的是哪个版本的 MySQL,但它似乎不支持 DATETIMEOFFSET 类型。 是否存在支持 DATETIMEOFFSET 的 MySQL 版本?或者有计划
研究 Seam 3,我发现 Seam Solder 允许将 @Named 注释应用于包 - 在这种情况下,该包中的所有 bean 都将自动命名,就好像它们符合条件一样@Named 他们自己。我没有看到
我知道 .append 偶尔会增加数组的容量并形成数组的新副本,但 .removeLast 会逆转这种情况并减少容量通过复制到一个新的更小的数组来改变数组? 最佳答案 否(或者至少如果是,则它是一个错
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
noexcept 函数说明符是否旨在 boost 性能,因为生成的对象中可能没有记录异常的代码,因此应尽可能将其添加到函数声明和定义中?我首先想到了可调用对象的包装器,其中 noexcept 可能会产
我正在使用 Angularjs 1.3.7,刚刚发现 Promise.all 在成功响应后不会更新 angularjs View ,而 $q.all 会。由于 Promises 包含在 native
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我正在编写一个玩具(物理)矢量库,并且遇到了 GHC 坚持认为函数应该具有 Integer 的问题。是他们的类型。我希望向量乘以向量以及标量(仅使用 * ),虽然这可以通过仅使用 Vector 来实现
PHP 的 mail() 函数发送邮件正常,但 Swiftmailer 的 Swift_MailTransport 不起作用! 这有效: mail('user@example.com', 'test
我尝试通过 php 脚本转储我的数据,但没有命令行。所以我用 this script 创建了我的 .sql 文件然后我尝试使用我的脚本: $link = mysql_connect($host, $u
使用 python 2.6.4 中的 sqlite3 标准库,以下查询在 sqlite3 命令行上运行良好: select segmentid, node_t, start, number,title
我最近发现了这段JavaScript代码: Math.random() * 0x1000000 10.12345 10.12345 >> 0 10 > 10.12345 >>> 0 10 我使用
我是一名优秀的程序员,十分优秀!