我想根据条件导出对象,例如,首先检查“AsyncStorage”中存储的某些语言,然后根据语言返回特定的
对象。
文件:
lang.js
import AsyncStorage from '@react-native-community/async-storage';
let exportingLang = {};
AsyncStorage.getItem('@lang').then(language=> {
if(language){
if(language === "hindi") exportingLang = {
name: 'a hindi name'
};
else if(language === "panjabi") exportingLang = {
name: 'a panjabi name'
};
else exportingLang = {
name: 'a english name'
};;
}
});
export const Lang = exportingLang;
post.js代码
import {Lang} from 'lang';
export default Post = props => {
return (
<Text>{Lang.name}</Text>
);
}
但是上面的代码不起作用。
为什么不将exportingLang的值存储在state中,然后在组件中使用它呢?
import AsyncStorage from '@react-native-community/async-storage';
export default Post = props => {
const [name, setName] = useState()
AsyncStorage.getItem('@lang').then(language=> {
if(language){
if(language === "hindi") {
setName('a hindi name')
} else if(language === "panjabi") {
setName('a punjabi name')
} else {
setName('an english name')
};
}
});
return (
<Text>{name}</Text>
);
}
这里首先要注意的是,根据文档,getItem
返回一个JavaScriptPromise
。按照JavaScript的工作方式,我们无法从promise中获取值并导出它们,而不解析或拒绝promise,这里将详细介绍。为了用您的示例来解释它,您可以为exportingLang分配一个值,但它几乎肯定会返回初始化它的初始空对象{}
,因为Promise分配是异步进行的,也就是说,它需要等待存储系统找到@lang
键,然后返回它的值,这可能需要一段时间(因此需要promise)。
如果使用lang.js
文件的目的是避免反复输入If语句,那么这一切都没问题(否则我只需在我需要的组件中使用getItem
Promise一次)。我将首先确保我们将promise返回的结果导出如下:
lang.js
export default AsyncStorage.getItem('@lang').then(language => {
let exportingLang = {name: 'default'};
if (language) {
if (language === 'hindi')
exportingLang = {
name: 'a hindi name',
};
else if (language === 'panjabi')
exportingLang = {
name: 'a panjabi name',
};
else
exportingLang = {
name: 'a english name',
};
}
return exportingLang;
});
这反过来会给我另一个出口promise。
其次,不能将Promise中的值直接用于React渲染方法。您需要使用useState
或use效应
将其分配到一个状态。你可以在这里读到更多。
为了简单起见,我在一个Component
中使用了它,如下所示:
import langPromise from './lang';
export default class App extends Component {
state = {
lang: { name: '' },
};
async componentDidMount() {
const lang = await langPromise.then(lang => this.setState({ lang }));
}
render() {
return (
<View>
<Text>{this.state.lang.name}</Text>
</View>
);
}
}
如果您有任何进一步的问题,请让我知道。
问题内容: 我有一个带有JSONB列的表,其中包含类似 我想向匹配=和=的JSON对象添加一个新的JSON条目(),这将导致 以下查询返回符合过滤器要求 的JSON对象 : 我现在的问题是,我不知道如何将新条目添加到特定对象。我尝试了类似的东西 但这不会像未知列那样执行。在分配给之前,我还确实需要将的结果与其余的合并,因为否则会覆盖整个内容。 如何根据过滤条件更新特定的深层嵌套JSON对象?如果我
我该如何做到这一点?谢了!
此问题与几天前发布的问题类似,将行从0折叠到0 与前一个问题不同的是,我们如何根据Id折叠那些时间差小于或等于60的行。 例如,使用相同的数据集 这将通过ID计算时差 这将导致如下所示的新列差异 现在只按< code >事件折叠行。身份证明..其中时间差小于或等于60,即< code>diff 正在寻找有关如何创建这种折叠数据集的帮助。提前谢谢。
我在互联网上到处搜索,寻找在特定页面上有条件地显示WooCommerce产品属性数据的方法。 如果属性某物有一个值,并且它在/上?过滤=1 如果属性位于特定的筛选页面上,我希望以不同的方式显示它们 前任:http://www.colorselectcoil.com/color-match-tool/?filtering=1 基于这个过滤的页面,显示一个产品属性“某物酷” 如果它是一个普通的Word
我有一个map对象,它由key作为字符串和value作为字符串列表组成,我所需要做的就是用JSTL迭代这个列表 例如; 我如何在JSTl中对list对象进行ITEART,并检查上面的条件。请提供建议。
我试图通过比较对象中的多个字段来从数组中找到重复的对象。 我想将对象的两个字段与同一数组的其他对象进行比较。 我想露营只是名称和 lname,忽略我的对象内的第 3 个字段 如何查找和删除输出如下的重复对象