- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的导航链接组件,在容器/展示类(智能/哑)中分开,如下所示:
我的演示组件:
import React, { PropTypes } from 'react';
class Navigation extends React.Component {
componentWillReceiveProps() {
console.log("here bro componentWillReceiveProps");
}
render() {
console.log(this.props);
var self = this;
return (
<div>
<ul>
{
this.props.items.map( (m, index) => {
var style = '';
console.log("index", index, "focus", self.props.focused);
if(self.props.focused == index){
style = 'focused';
}
return <li key={Math.random()} className={style} onClick={self.props.clickHandler.bind(this, index)}>{m}</li>;
})
}
</ul>
<p>Selected: {this.props.items[this.props.focused]}</p>
</div>
);
}
}
export default Navigation;
我的容器组件:
import React, {PropTypes} from 'react';
import Nav from '../components/Navigation';
class NavigationContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
focused : 0
};
}
clicked(index) {
this.setState({focused: index}, function () {
console.log("set to", this.state.focused);
});
}
render() {
return (
<Nav items={['Home', 'About', 'Contact Us']} clickHandler={this.clicked} focused={this.state.focused}/>
);
}
}
NavigationContainer.propTypes = {};
export default NavigationContainer;
当单击任何项目(主页、联系我们...等)并修改状态时,不会再次调用 render() 方法,因此传递给dumb组件的 Prop 是最新的。我的理解是,当状态发生变化时,将调用 render() 。我在这里做错了什么?
最佳答案
当您使用 ES2015 类语法扩展
React.Component
时,您需要将操作处理程序绑定(bind)到类的上下文中。
试试这个:
render() {
return (
<Nav items={['Home', 'About', 'Contact Us']} clickHandler={index => this.clicked(index)} focused={this.state.focused}/>
);
}
通常,最好不要在 render
中使用箭头函数或 bind
方法,因为它会在任何 render
上生成函数的新副本称呼。将函数声明移至类构造函数
。
在这种情况下,我个人更喜欢使用箭头函数作为类属性
class MyClass extends React.Component {
handleClick = () => {
// your logic
};
render() {
return (
<button onClick={this.handleClick}>Click me</button>
);
}
}
它不是 ES2015 规范的一部分,而是 babel stage-0 preset支持这种语法
您可以在 this article 中阅读更多关于 React 中的上下文绑定(bind)的信息
关于javascript - render() 没有在 this.setState() 上被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38970052/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!