我的父班有两个孩子
计数器组件具有状态'计数器'以第二个递增;
class Counter extends Component {
constructor(props) {
super(props)
this.resetCount = this.resetCount.bind(this);
this.state = {
count : 0
}
}
resetCount() {
this.setState({
count : 0
});
}
componentDidMount() {
setInterval(() => {
this.setState({
count: this.state.count + 1
});
}, 1000);
}
render() {
const {count} = this.state;
const {color,size} = this.props;
return (
<Text style={{color, fontSize: size}}>{count}</Text>
);
}
}
在按钮组件中,我有一个onpress的东西
<Button
onPress={resetCount}
title="Reset COunt"
color="#841584"
/>
在我的主要父类我渲染
<Counter color={'green'} size={90} />
<Button/>
但是我收到了错误 &#39;无法找到变量resetCount&#39;在App.js
答案 0 :(得分:0)
你必须使用&#39; this.resetCount&#39;当使用&#39; Button&#39;在Counter.render()
中 <Button
onPress={this.resetCount}
title="Reset COunt"
color="#841584"
/>
如果Button是你自己提到的Component,你必须继承onPress函数
组件按钮
<Button onPress={this.props.onResetCount} ... />
组件计数器
render(){
return (
<Text style={{color, fontSize: size}}>{count}</Text>
<Button onResetCount={this.resetCount} title="Reset Count" color="... />
);
)
}
答案 1 :(得分:0)
这是因为Button无法访问其兄弟Counter组件中的类方法。如果通过将共享方法移动到父组件来重新组织代码,您可以a)实现您想要的,并且b)使您的代码更简单一些。换句话说,使Counter成为由两个较小的哑组件/纯函数组成的主要组件。
// No need for a component, just a function that returns
// a styled div
function Text({ count }) {
return <div>{count}</div>;
}
// Another function to return a button
function Button({ resetCount, text }) {
return <button onClick={resetCount}>{text}</button>;
}
// The main component that keeps the state which it passes
// to the dumb Text component
class Counter extends React.Component {
constructor() {
super()
this.state = { count: 0 };
this.resetCount = this.resetCount.bind(this);
}
componentDidMount() {
setInterval(() => {
this.setState({
count: this.state.count + 1
});
}, 1000);
}
resetCount() {
this.setState({ count: 0 });
}
render() {
return (
<div>
<Text count={this.state.count} />
<Button resetCount={this.resetCount} text="Reset count" />
</div>
)
}
}
ReactDOM.render(
<Counter />,
document.getElementById('container')
);
<强> DEMO 强>
答案 2 :(得分:0)
您收到错误是因为您无法以onPress={resetCount}
方式执行此操作。它正在搜索变量。但是你没有变量,它是一个功能。因此,如果要访问函数this.resetCount
,则应使用resetCount()
。
以下是如何从子组件中的按钮访问父组件的功能的示例:
// Parent component:
resetCount() {
// your code
}
render() {
return(
<Button resetCount={this.resetCount} /* your other stuff */ />
);
}
// Button component:
<button onPress={this.props.resetCount}>Click me</button>
注意:您无法通过这种方式更新兄弟姐妹。您应该将函数从<Counter/>
移动到父组件。