我试图通过从州传递fixed
道具来定位修复,但我无法在setState
函数内handleScroll
。我不确定如何访问函数内部的状态。
class App extends Component {
state = { fixed: false }
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
}
handleScroll(e) {
let scrollTop = e.srcElement.body.scrollTop;
(scrollTop > 0) ? this.setState({ fixed: true }) : this.setState({ fixed: false });
}
render() {
// grab steps
const { steps } = this.props;
const { fixed } = this.state;
const { scrollToStep } = this;
return ce('div', { className:'allTheSteps' },
ce(pagination, { steps, fixed }),
Object.values(steps).map((step, i) =>
ce(Steps, { step, key: v4(), i }),
)
);
};
};
答案 0 :(得分:1)
您需要绑定handleScroll
方法:
class App extends Component {
constructor(props) {
super(props);
this.handleScroll = this.handleScroll.bind(this);
}
...
};
答案 1 :(得分:0)
您的回调正在错误的范围内执行。您必须将其绑定到正确的范围。为此,您可以使用ES6箭头功能,并且您的方法应该绑定,而无需手动执行。 在您的示例中:
...
componentDidMount() {
window.addEventListener('scroll', (e) => this.handleScroll(e));
}
componentWillUnmount() {
window.removeEventListener('scroll', (e) => this.handleScroll(e));
}
...