对你来说这应该是一个简单的反应怪物.:)我已经写了条件,但我无法弄清楚如何在我的构造函数中处理视口大小以使条件工作.简单明了,我希望在视口大小为1451px或更宽时显示一个元素,在1450px或更小时显示另一个元素.
这是我的代码(简化)
class My Class extends React.Component {
constructor(props) {
super(props);
this.state = {
isDesktop: "1450px" //This is where I am having problems
};
}
render() {
const isDesktop = this.state.isDesktop;
return (
<div>
{isDesktop ? (
<div>I show on 1451px or higher</div>
) : (
<div>I show on 1450px or lower</div>
)}
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
也许我倾向于使用ComponentWillMount或ComponentDidMount来处理它.老实说,不确定.我是React的新手.
先谢谢你们.
小智 28
也许我倾向于使用ComponentWillMount或ComponentDidMount来处理它
是的,您需要监听resize事件并更新内部状态.您可以通过在组件安装时添加事件处理程序来完成此操作.试试这里的完整示例.
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
isDesktop: false //This is where I am having problems
};
this.updatePredicate = this.updatePredicate.bind(this);
}
componentDidMount() {
this.updatePredicate();
window.addEventListener("resize", this.updatePredicate);
}
componentWillUnmount() {
window.removeEventListener("resize", this.updatePredicate);
}
updatePredicate() {
this.setState({ isDesktop: window.innerWidth > 1450 });
}
render() {
const isDesktop = this.state.isDesktop;
return (
<div>
{isDesktop ? (
<div>I show on 1451px or higher</div>
) : (
<div>I show on 1450px or lower</div>
)}
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
foa*_*esm 22
只是在我遇到同样的问题后在这里发布最近的更新,但使用功能组件和useEffect/ useStateReact Hooks 进行设置:
const MyFunction = () => {
const [isDesktop, setDesktop] = useState(window.innerWidth > 1450);
const updateMedia = () => {
setDesktop(window.innerWidth > 1450);
};
useEffect(() => {
window.addEventListener("resize", updateMedia);
return () => window.removeEventListener("resize", updateMedia);
});
return (
<div>
{isDesktop ? (
<div>I show on 1451px or higher</div>
) : (
<div>I show on 1450px or lower</div>
)}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
syl*_*n s 13
如果你使用NextJS ...你会遇到类似这样的错误:window is not Defined。这是代码,没有错误,请享受。
首先我检查窗口的大小是否大于或小于1450px(因为如果用户从不调整窗口大小,所有代码将毫无用处)
但我还需要检查用户是否调整窗口大小......自己看看
export default function MyFunction() {
const [isDesktop, setDesktop] = useState(false);
useEffect(() => {
if (window.innerWidth > 1450) {
setDesktop(true);
} else {
setDesktop(false);
}
const updateMedia = () => {
if (window.innerWidth > 1450) {
setDesktop(true);
} else {
setDesktop(false);
}
};
window.addEventListener('resize', updateMedia);
return () => window.removeEventListener('resize', updateMedia);
}, []);
return (
<div>
{isDesktop ? (
<div>I show on 1451px or higher</div>
) : (
<div>I show on 1450px or lower</div>
)}
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10105 次 |
| 最近记录: |