gpt4 book ai didi

javascript - 在调整窗口大小时更改 React js 中的值

转载 作者:行者123 更新时间:2023-12-03 16:41:06 25 4
gpt4 key购买 nike

我正在用 react js 建立一个照片库。显然它必须是响应式的,我已经通过在组件的渲染方法中设置值来解决这个问题:

let thumbWidth = window.innerWidth >= 480 ? 75 : 100;

问题是我需要在调整窗口大小时更改 const 值。我的第一次尝试是构建一个这样的函数并将其绑定(bind)到构造函数中:
getThumbWidth = (vpWidth) => {
if(vpWidth >= 480 ) {
this.setState({thumbSize: 120});
} else {
this.setState({thumbSize: 50});
}
}

这在设置变量的初始值方面有效,但是当窗口调整大小时如何触发该函数?

尝试添加调整大小功能:
resize = () => this.getThumbWidth()

...然后更改 getThumbWidth 以便它设置组件状态中的值 - 想法是当状态更新时组件自动重新渲染:
getThumbWidth = (vpWidth) => {
if(vpWidth >= 480 ) {
this.setState({thumbSize: 120});
} else {
this.setState({thumbSize: 50});
}
}

然后按照其他几个解决方案中的建议通过生命周期方法调用它,但事件监听器似乎没有被触发:
componentDidMount() {
window.addEventListener('resize', this.resize)
}

componentWillUnmount() {
window.removeEventListener('resize', this.resize)
}

仍然无法正常工作...有什么想法吗?

最佳答案

@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"));

关于javascript - 在调整窗口大小时更改 React js 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com