目前我有一个 react native 应用程序,我遇到的问题是在每次构建或提交时更新版本非常耗时。
此外,我启用了 Sentry,因此每次构建时,某些构建都会获得相同的版本,因此某些崩溃很难确定它们来自何处。
最后,手动更新版本容易出错。
我如何设置我的构建以在每次构建并忘记所有这些手动任务时生成自动版本?
我知道这是RN中一个非常常见的问题,我仍然试图理解从属性文件加载数据时返回promise的非常可能的优势,而不仅仅是返回值,这使得链接请求非常麻烦......但无论如何.这是我现在所拥有的,它是AsyncStorage RN实现的包装器:
multiGet = async (key) => {
var value = null;
try {
value = await AsyncStorage.multiGet(key).then(
(values) => {
value = values;
console.log('Then: ',values);
});
} catch (error) {
console.log('Error: ',error);
}
console.log('Final: ',value);
return value;
}
Run Code Online (Sandbox Code Playgroud)
此时,值未定义.在我的主要代码中,我有这个:
var filter = this._getFilter();
console.log('returned filter:',filter);
Run Code Online (Sandbox Code Playgroud)
_getFilter函数是使用AsyncStorage包装器的函数,但是'返回的过滤器'在第一个函数之前记录,所以它不会在继续之前等待返回的值,所以我得到一个未定义的值.
起初,我认为只是通过使用async/await AsyncStorage wold返回一个值而不是一个promise但是在测试之后,我得到的值是:
value = await AsyncStorage.getItem('key')
Run Code Online (Sandbox Code Playgroud)
仍然是一个承诺,所以我必须使用then()来读取值.
基本上我在日志中看到的顺序是:
_getFilter
returned value: undefined
Then: value: here I get the correct value from the keys but the code already passed and I don't have …Run Code Online (Sandbox Code Playgroud) 我计划使用 Azure 流量管理器将我在一个 Azure 区域上运行的应用程序故障转移到 Azure 区域。我需要一些建议,如果这是进行故障转移的正确方法吗?我们发现 Azure 存在一个问题,即一个区域中的大部分服务都会停机几个小时。虽然我知道 Azure 流量管理器与该区域无关。但是,尽管我的后端 web 应用程序可以访问,但 Azure 流量管理器是否可能出现故障或流量管理器端点无法访问?
如果我打算使用 Azure 流量管理器,我还应该担心哪些其他问题?
基本上,我有一个React Native组件,这是我的Login组件。我想测试多个状态变化。
我的组件的第一阶段是显示一个加载组件,然后通过多个异步函数,例如:
到目前为止,我已经模拟了fetch和NetInfo。覆盖率表明,某些函数的执行方式类似于setState中的回调,但是例如snapchots显示了第一个原始状态,即加载微调器。
我知道这是预料之中的,因此我尝试在浅层包装实例上执行forceUpdate和updae,并且快照中没有任何变化。对我唯一有效的方法是将超时设置为100ms,然后检查包装器。另外,我需要手动执行一些内部功能,因为某种程度上,并非所有功能都可以执行,就像setState中的回调一样。这很奇怪,因为覆盖率表明setState是执行的,而不是回调。
笑话单元测试:
it("should store the confirmation result", (done) => {
let wrapper = shallow( <LoginComponent
sms={{
enabled: true,
sms_placeholder: 'Phone Number',
text: 'Enter your phone number',
buttonSend: {
text: 'SEND'
}
}}
/>);
wrapper.setState({phone: '1234567890'});
setTimeout(()=>{
expect(wrapper.update()).toMatchSnapshot();
const spySendSms = jest.spyOn(wrapper.instance(), "sendSms");
const spyError = jest.spyOn(wrapper.instance(), "error");
wrapper.update().find("[testID='smsButtonSend']").simulate("press");
expect(spySendSms).toHaveBeenCalledTimes(1);
expect(spyError).toHaveBeenCalledTimes(0);
done();
}, 100); });
Run Code Online (Sandbox Code Playgroud)
我一直在阅读有关将承诺返还给Jest的信息,因此它们都被链接在一起,但是我只看到它是通过fetch生成的,并将功能作为道具传递给组件的,而我直接在组件内部拥有所有这些功能。
我应该重构需要外部功能的组件吗?在每个单元测试中都覆盖并模拟内部函数?
很难测试这种复杂的场景。
是否可以将扩展运算符与 React Native 中的样式组件一起使用?
我有这个组件:
const StyledHeaderText = styled.Text`
fontFamily: ${props => props.theme.font};
fontSize: ${props => props.theme.fontSizeSubtitle};
color: ${props => (props.lightMode) ? props.theme.fontColor : props.theme.fontPrimaryColor}
`;
Run Code Online (Sandbox Code Playgroud)
但是可以说,在我的主题中,我有一个同时具有 fontFamily 和 fontSize 的对象,并且我在整个应用程序中都使用它。我想知道我是否可以做这样的事情,目前它不起作用:
const StyledHeaderText = styled.Text`
...${props => props.theme.fontHeader};
color: ${props => (props.lightMode) ? props.theme.fontColor : props.theme.fontPrimaryColor}
`;
Run Code Online (Sandbox Code Playgroud)
例如,这在 iOS 中设置高程也很有用,因为我必须设置 4 种样式。
谢谢
我正在开发一个Android应用程序.
到目前为止,我已经创建了自己的SQLiteOpenHelper作为单例和一个同步的getInstance().
我不确定我是否也应该使用ContentProvider.我知道Android使用它来匹配应该打开我的Intent的Activity,但是我应该在我的应用程序中使用它吗?
如果我使用它可以获得什么样的直接优势?我正在启动应用程序,我希望尽可能多地使用最佳实践.
我可以稍后再添加吗?我似乎无法完全理解这些ContentProviders的功能.
谢谢!
react-native ×4
android ×2
javascript ×2
azure ×1
enzyme ×1
gitversion ×1
gradle ×1
jestjs ×1
node.js ×1
reactjs ×1