Ste*_*tef 2 javascript css lifecycle responsive-design reactjs
我正在用React JS建立一个照相馆。显然,它必须具有响应性,我已经通过在组件的render方法中设置如下值来解决了这个问题:
let thumbWidth = window.innerWidth >= 480 ? 75 : 100;
Run Code Online (Sandbox Code Playgroud)
问题是我需要在调整窗口大小时更改const值。我的第一个尝试是构建一个像这样的函数并将其绑定到构造函数中:
getThumbWidth = (vpWidth) => {
if(vpWidth >= 480 ) {
this.setState({thumbSize: 120});
} else {
this.setState({thumbSize: 50});
}
}
Run Code Online (Sandbox Code Playgroud)
这在设置变量的初始值方面起作用,但是当窗口调整大小时如何触发函数?
尝试添加调整大小功能:
resize = () => this.getThumbWidth()
Run Code Online (Sandbox Code Playgroud)
...然后更改getThumbWidth,以便它设置组件状态中的值-这样的想法是,当状态更新时,组件会自动重新渲染:
getThumbWidth = (vpWidth) => {
if(vpWidth >= 480 ) {
this.setState({thumbSize: 120});
} else {
this.setState({thumbSize: 50});
}
}
Run Code Online (Sandbox Code Playgroud)
然后按照其他几种解决方案中的建议,通过生命周期方法调用它,但是事件监听器似乎没有触发:
componentDidMount() {
window.addEventListener('resize', this.resize)
}
componentWillUnmount() {
window.removeEventListener('resize', this.resize)
}
Run Code Online (Sandbox Code Playgroud)
仍然无法运作...任何想法?
@Jousi,尝试下面的代码在窗口调整大小时效果很好
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
windowSize: "",
thumbWidth: 75
};
}
handleResize = e => {
const windowSize = window.innerWidth;
const thumbWidth = (windowSize >= 480 && 100) || 75;
this.setState(prevState => {
return {
windowSize,
thumbWidth
};
});
};
componentDidMount() {
window.addEventListener("resize", this.handleResize);
}
componentWillUnmount() {
window.removeEventListener("resize", this.handleResize);
}
render() {
return (
<div>
<h2>window size: {this.state.windowSize}</h2>
<h3>thumbnail width: {this.state.thumbWidth}</h3>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4334 次 |
| 最近记录: |