我正在做我的第一个React Native项目。这是一个带有SDK 33的expo托管应用程序。
我想使用在这里的expo文档中描述的AccessibilityInfo API:https://docs.expo.io/versions/v33.0.0/react-native/accessibilityinfo/
该页面上的示例很简单,但是缺少一件事:我从哪里导入AccessibilityInfo?我的集成开发环境自动完成向import {AccessibilityInfo} from "react-native-web";
建议,但这似乎是错误的,因为我理解react-native-web是为了帮助将react-native功能引入web应用程序。
所以我转而使用import {AccessibilityInfo} from "react-native";
但是当我尝试在我的组件中执行以下操作时:
componentDidMount () {
AccessibilityInfo.isScreenReaderEnabled().then( (screenReaderEnabled) => {
console.log(screenReaderEnabled);
});
}
我得到了一个“_reactNative.AccessibilityInfo.isScreenReaderEnabled不是一个函数”的TypeError。
根据我的集成开发环境的自动完成功能,AccessibilityInfo模块只有以下几个方法:addEventListener
、announceForAccessibilty
、fetch
、removeEventListener
、setAccessibilityFocus
。但是根据上面链接的expo文档,我应该有其他方法,比如isScreenReaderEnabled
。
我唯一的猜测是我没有导入正确的模块。但我在谷歌上搜索时并没有发现任何有趣的东西。那么,有谁能给我指出正确的方向来帮助我解决这个问题呢?
发布于 2019-07-25 16:09:32
如果你查看github,他们有这个例子
import {AccessibilityInfo} from "react-native";
...
class ScreenReaderStatusExample extends React.Component<{}> {
state = {
screenReaderEnabled: false,
};
componentDidMount() {
AccessibilityInfo.addEventListener(
'change',
this._handleScreenReaderToggled,
);
AccessibilityInfo.fetch().done(isEnabled => {
this.setState({
screenReaderEnabled: isEnabled,
});
});
}
componentWillUnmount() {
AccessibilityInfo.removeEventListener(
'change',
this._handleScreenReaderToggled,
);
}
_handleScreenReaderToggled = isEnabled => {
this.setState({
screenReaderEnabled: isEnabled,
});
};
render() {
return (
<View>
<Text>
The screen reader is{' '}
{this.state.screenReaderEnabled ? 'enabled' : 'disabled'}.
</Text>
</View>
);
}
}
在这些示例中,它们所做的一切只是调用Fetch,而不是直接使用变量
componentDidMount() {
...
AccessibilityInfo.fetch().done(isEnabled => {
this.setState({
screenReaderEnabled: isEnabled,
});
});
}
fetch返回IsEnabled
状态
因此在您ComponentDidMount
中将其从
AccessibilityInfo.isScreenReaderEnabled().then( (screenReaderEnabled) => {
console.log(screenReaderEnabled);
});
至
AccessibilityInfo.fetch().done(isEnabled => {
this.setState({
screenReaderEnabled: isEnabled,
});
});
并将isEnabled响应保持在状态。
https://stackoverflow.com/questions/57190046
复制相似问题