我正在制作非常简单的反应应用程序.然而,当我尝试通过onChange事件调用父(实际上祖父母)组件的方法时,我不断得到Uncaught TypeError: Cannot read property 'props' of undefined.
这是触发事件的组件/表单(因此在绑定的父组件上调用方法...是的,我在方法上使用.bound(this),因为我通过props从父组件传递它.).
class MonthsTable extends Component {
handleChangeOnMonth(e){
this.props.setMonth(e.target.id, e.target.value); // here the method is not found, causing error.
}
render(){
console.log(this.props.setMonth) // here the method is present alright
return (<form>
{this.props.months.map((e, i) =>
<input
type='number'
id={i}
key={i} // yes I know, bad habit, but in this case it doesn't matter
value={this.props.months[i]}
onChange={this.handleChangeOnMonth} />)}
</form>)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我如何将方法作为道具从大多数父(祖父母)组件传递.
<Months setMonth={this.setMonth.bind(this)} />
Run Code Online (Sandbox Code Playgroud)
这是我如何将方法作为父项中的道具传递(方法所有者和方法调用者之间的组件)
<MonthsTable setMonth={this.props.setMonth} />
Run Code Online (Sandbox Code Playgroud)
最后传递给您首先看到的组件(MonthsTable).无论是否相关,最终(大多数孩子)组件都会显示,这取决于if语句是否正常工作(可能某种程度上是相关的,我不知道).
问题是......为什么(setMonth)方法在(handleChangeOnMonth)方法中是'不可见的'.
谢谢你的建议.
所以我想弄清楚Relay.js.我想到了一个简单的应用程序,它基本上模仿了Relay网站上的例子.虽然我已经设法摆脱了两个控制台(节点和chrome)中的错误,但我的组件没有收到我在Raley.Container中指定的片段.我不知道问题出在哪里,因为我的应用程序看起来非常像Relay的例子.
请注意,map方法on this.props.companies不可用,因为它是一个具有1个属性的对象,即__dataId__.
第一部分
class App extends React.Component {
render() {
return (
<div>
{this.props.companies.map((comapny => <Company company={company} />))}
</div>
);
}
}
export default Relay.createContainer(App, {
fragments: {
companies: () => Relay.QL`
fragment on Companies {
companies { ${Company.getFragment('company')} }
}
`,
},
});
Run Code Online (Sandbox Code Playgroud)
第二部分
class Company extends React.Component {
render() {
return (
<div>
<h1>{this.props.comapany.name}</h1>
</div>
);
}
}
export default Relay.createContainer(Company, {
fragments: {
company: () => Relay.QL`
fragment on Company {
__id,
name
}
`, …Run Code Online (Sandbox Code Playgroud) 在Chrome中运行Nightwatch测试CI.有时(在5个版本中大约一次)我在其中一个测试中遇到以下错误.在此之前的每个测试工作正常.
我有最新的Chromedriver和Selenium独立服务器.
我认为问题是Selenium服务器在请求中崩溃,我很难知道为什么.
Error retrieving a new session from the selenium server
Connection refused! Is selenium server started?
{ Error: socket hang up
at createHangUpError (_http_client.js:254:15)
at Socket.socketCloseListener (_http_client.js:286:23)
at emitOne (events.js:101:20)
at Socket.emit (events.js:188:7)
at TCP._handle.close [as _onclose] (net.js:498:12) code: 'ECONNRESET' }
Run Code Online (Sandbox Code Playgroud)
这也是我nightwatch.json照顾硒的一部分.
"selenium": {
"start_process": true,
"server_path": "scripts/Nightwatch/selenium-server-standalone-3.0.1.jar",
"log_path": "app/E2E/reports/selenium",
"port": 4444,
"cli_args": {
"webdriver.chrome.driver": "scripts/Nightwatch/chromedriver"
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么Selenium崩溃以及如何解决这个问题?
目前正在使用Ecto + Postgres处理Phoenix项目.在创建评论时,作为belongs_to用户和文章的评论,有没有办法建立多个关联来生成一个变更集?
像这样的伪代码
comment_changeset = build_assoc(article, :comment)
|> build_assoc(user, :comment)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在使用来自expo包装的相机,但在相机视图失真方面遇到了麻烦。我的手机有2:1比率,这是非标准的。
当我使用getSupportedRatiosAsync相机的方法时,我得到了各种比例,如1:1, 2:1, 4:3, 16:9,但只是2:1看起来不错。
如何选择适合设备自然分辨率的比率?有没有办法访问设备的首选比率?或者它周围有什么技巧,比如总是选择16:9并让相机组件添加黑色边距,而实际设备的比例不适合16:9?
编辑:
我的手机分辨率是2196x1080,所以正确的比例应该是2:1。但是我无法想出一个可以计算2196x1080=>的函数2:1,因为(2 * 1080) !== 2196
即使对于如此愚蠢的分辨率,有什么方法可以推断出最佳比率?
android android-camera react-native react-native-android expo
javascript ×2
reactjs ×2
android ×1
ecto ×1
elixir ×1
expo ×1
graphql-js ×1
java ×1
postgresql ×1
react-native ×1
relay ×1
selenium ×1