【发布时间】:2020-01-23 01:56:37
【问题描述】:
我正在尝试设置一个基本的自定义挂钩来返回 React Native 中的设备方向。我旁边有一个功能代码示例,但我不知道为什么这不起作用。我认为这是某种关闭/范围问题,但显然我不知道。
我知道有更简单的方法来获取设备方向,但我想知道为什么这不起作用以及如何使它起作用。
当前行为:调用setOrientation 不会更改orientation 的值。
预期行为:调用setOrientation 会更新orientation 的值。
一旦发生这种情况,我认为钩子会正常工作,因为每次Dimensions 更新时它都会返回null。
[更新:为清楚起见进行了编辑]
import { Dimensions, } from 'react-native';
function useDeviceDimensions() {
const [orientation, setOrientation] = useState(null);
useEffect(() => {
const setDimensions = (e) => {
console.log('running', orientation); // null
const {width, height} = e.window;
setOrientation(width > height ? 'landscape' : 'portrait');
};
Dimensions.addEventListener('change', setDimensions);
return () => Dimensions.removeEventListener('change', setDimensions);
}, [])
return orientation;
}
export default useDeviceDimensions;```
【问题讨论】:
-
useDeviceDimensions函数返回的对象的属性永远不会改变,这与 React 无关。只是因为你从不改变返回的对象,你重新定义了它包含的一些变量。 -
只能在这里猜测,您所说的“这不起作用”是什么意思 -
orientation应该可以正常工作。您不会在维度更改时更新/调用setWidth和setHeight。 -
@Titus 你能详细说明一下吗?我不明白我的代码如何重新定义状态变量而不是更新它们。
-
@ford04 请查看更新后的代码 - 我取出了未使用的部分,以便更清楚我要做什么。
-
我的意思是,从外观上看,您使用的是
useDeviceDimensions的返回值,如果是这样的话,这个返回值(orientation)不会改变如果你在函数内部重新定义它。
标签: javascript reactjs react-native closures react-hooks