我一直在研究编写自己的 React 钩子,但到目前为止,我一直在努力从技术层面说明普通 JavaScript 函数和钩子之间的区别。
例如,这篇文章说钩子是“普通的 JavaScript 函数,可以在其中使用其他钩子”,但在幕后还有什么?
我知道我们use在钩子名称中使用了这个词,但我很好奇钩子是什么使它们成为钩子而不是函数!
我已经分叉了这个 React 库以与 React Native 一起使用,并通过安装react-native-svg、use-elapsed-time和 prop-types使其工作:
https://github.com/vydimitrov/react-countdown-circle-timer
但是我现在无法使用调试器:
不变违规:Chrome 不支持在本机模块上调用同步方法。
考虑提供替代方法以在调试模式下公开此方法,例如通过提前公开常量。
此错误位于:在 CountdownCircleTimer (at AppRoot.js:118) in AppRoot (at App.js:9) in Provider (at App.js:8) in App (at renderApplication.js:40) in RCTView (at AppContainer.js:101) 在 RCTView(在 AppContainer.js:119)
我已经搜索了高低有关哪个包可能导致错误的任何线索,我只能看到报告的与react-native-device-info 相关的问题,但这并没有导致问题。该错误意味着什么?如果有关它的信息如此之少,我该如何开始调试?
我正在阅读这篇关于分析 React 应用程序的文章:优化慢速 React 组件,在分析器中,您可以在工具提示和侧边栏中看到“为什么要渲染”:
在我的分析器中没有这样的信息。我正在使用最新版本的 React Native 调试器:
我怎样才能看到/显示这些信息?
我对 React 中的 UI 库和 CSS 非常陌生。我正在使用 Ant Design 的数据选择器: https: //ant.design/docs/react/introduce。
他们提供了 CodePen 示例,在 CSS 选项卡中您可以看到:
@import 'antd/dist/antd.css';
但是,当我将其添加到我的 CSS 样式表(我使用它导入到组件中)时,import './Component.css';出现错误
找不到模块:无法解析“./antd/dist/antd.css”
在组件文件夹中。
我已经安装了 npm 包,但无法让 CSS 工作。
我究竟做错了什么?
当 React Native 应用程序在后台或已被杀死时,有什么方法可以将其带到前台吗?
我尝试过使用react-native-invoke-app,但它不再维护并且仅支持Android版本<9。
react-native-paper文档建议您可以使用主题设置禁用按钮的颜色,但此代码不起作用:
export const buttonTheme = {
colors: {
primary: COL_BASE_YELLOW,
disabled: COL_DARK_HIGHLIGHT,
},
}
<Button
loading={submittedPhoneNumber ? true : false}
mode="contained"
onPress={() => handleSubmitPhoneNumber(phoneNumber)}
theme={buttonTheme}
disabled={phoneNumber.length < 5 ? true : false}>
Continue
</Button>
Run Code Online (Sandbox Code Playgroud)
然而,颜色primary有效。当按钮被禁用时如何更改按钮的颜色?
我目前有以下活动,它是在我的应用程序启动时创建的,并在我的 AndroidManifest.xml 中声明为活动:
AndroidManifest.xml:
<activity android:name=".IncomingActivity"></activity>
Run Code Online (Sandbox Code Playgroud)
传入Activity.java:
package com.xyz;
import android.os.Build;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
public class IncomingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
}
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
setContentView(R.layout.activity_incoming);
}
}
Run Code Online (Sandbox Code Playgroud)
我现在希望能够从 React Native 按需使用此功能。到目前为止,我已经像下面这样重构了它,但是当调用这个本机方法时,我只是得到一个空白的白屏,我认为问题出在这一行:activity.setContentView(mReactRootView);
更新类:
public class UnlockDevice extends ReactContextBaseJavaModule {
@Override
public String getName() {
return "UnlockDevice";
}
private ReactContext mReactContext;
private ReactRootView mReactRootView;
public UnlockDevice(ReactApplicationContext reactContext) { …Run Code Online (Sandbox Code Playgroud) 我能够使用RunAndroid Studio构建我的应用程序,但是使用我更喜欢的 React Native CLI,该应用程序不会使用该react-native run-android命令构建。
使用 React Native CLI,我收到错误消息:
Execution failed for task ':app:packageDebug'.
> react_9eow0duexig9bim4oxa9fkqs2$_run_closure4$_closure6$_closure10$_closure18
Run Code Online (Sandbox Code Playgroud)
有很多关于引用错误的第一行的在线帖子,其中没有一个解决方案可以修复构建,但是在搜索第二行时实际上没有谷歌结果。
当 React Native CLI 不能时,为什么 Android Studio 能够构建应用程序?
我正在使用 RN v 0.61.4
非常感谢任何帮助。
我有这个 TypeScript 错误:
类型“xyz”不可分配给类型“TableComponents”。
所以我需要将我的类型转换为 TableComponents。但是当我尝试使用以下方式导入它时,该接口不可用:
import { TableComponents } from 'antd/lib/table/interface';
Run Code Online (Sandbox Code Playgroud)
该接口在此处列为库的一部分。
如何将其导入到我的 React 项目中?
我正在通过 CDN 在 React 中使用带有Windy 的Leaflet,效果很好:
在 index.js 中:
<script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
<script src="https://api.windy.com/assets/map-forecast/libBoot.js"></script>
Run Code Online (Sandbox Code Playgroud)
反应组件:
export const renderMap = (): void => {
const options = {
key: 'xyz',
lat: 41.3,
lon: 2.1,
zoom: 10,
};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(window as any).windyInit(options, (windyAPI: any) => {
const { map } = windyAPI;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(window as any).L.popup()
.setLatLng([41.3, 2.1])
.setContent(':)')
.openOn(map);
});
};
Run Code Online (Sandbox Code Playgroud)
但是我希望能够使用传单 npm 包,而不是 CDN。当我导入包时,它被定义但 Windy 抛出错误:
libBoot.js:3 Leaflet 库丢失
在 index.js 中:
<script src="https://api.windy.com/assets/map-forecast/libBoot.js"></script> …Run Code Online (Sandbox Code Playgroud) react-native ×5
reactjs ×5
android ×2
java ×2
javascript ×2
css ×1
leaflet ×1
react-hooks ×1
typescript ×1