class Parent extends Component {
constructor(props) {
super(props);
this.state = { "id": "1" };
}
setIdFromChildA = (id) => this.setState({ "id": id });
setIdFromChildB = (id) => this.setState({ "id": id });
render() {
return (
<ChildA id={this.state.id} setId={this.setIdFromChildA} />
<ChildB id={this.state.id} setId={this.setIdFromChildB} />
);
}
}
class ChildA extends Component {
constructor(props) {
super(props);
this.state = {...};
}
componentDidMount() {
this.foo()
}
foo() {
this.props.setId("2");
}
}
class ChildB extends Component {
constructor(props) {
super(props);
this.state = {...};
}
handleClick = (e) => {this.props.setId("2")};
render() {
return (
<button type="button" onClick={this.handleClick} />
);
}
现在的问题是 ChildA 调用 setId 没有问题但是 ChildB 在调用时会报错TypeError: _this.props.setId is not a function
。A 和 B 的区别在于一个是在componentDidMount()
中执行另一个是 onClick 事件触发,是因为这个原因吗?
1
swirling 2018-02-02 16:00:02 +08:00 via iPhone
我觉得应该是 a 报错 b 不报错才对吧
|
2
50480350 2018-02-02 16:06:59 +08:00
this.handleClick = this.handleClick.bind(this);
|
3
brickyang 2018-02-02 17:17:37 +08:00 via iPhone
你在 childA 的 constructor() 里加上 this.foo = this.foo.bind(this) 试试
|
4
brickyang 2018-02-02 17:19:15 +08:00 via iPhone
噢噢,眼花了,在 childB 的 constructor 里给 handleClick bind this 试试
|
5
Oathbinder OP |
6
Mullvinn 2018-02-02 17:54:58 +08:00
跑了一下贴出来的代码,没发现报错,看看是不是其他哪里有问题
|
7
yacolinqi 2018-02-02 21:28:03 +08:00 via Android
断点调试一下呗,或者在 handleClick 打印一下看看呗
|