행동에서 React Native의 Require를 깊이 파고들다
11737 단어 React Nativetech
개시하다
여러분
require('./relative-path')
하고 있어요?흔히 볼 수 있는 것은 로고 이미지와 같은 정적 PNG를 읽고 앱에 넣는 것입니까?
<Image source={require('./logo.png')} />
디버그 환경(Metro 연결 개발)에서require(./logo.png)
의 반환값은 console입니다.로그 등의 각도에서 보면 정수치만 되돌아온다.2
라4
라, 파일 수와 비례하여 계수가 증가할 것 같다.React Native의 표준 구성 요소만 사용한다면 이 수수께끼를 풀 필요가 없다
require
시스템의 사용자 정의 구성 요소와 Native Module을 개발하고 싶어서요.좀 알아볼게요.
Image.resolveAssetSource()
우선 안드로이드 등
R.res.logo
의 R반과 늘 가깝다는 생각이 든다.결론은 호출
react-native
에서 제공된 Image 구성 요소가 제공하는 방법Image.resolveAssetSource(resID)
을 통해 대상을 얻을 수 있다는 것이다.{
"__packager_asset": true,
"width": 1000
"height": 1000,
"scale": 1,
"uri": "http://localhost:8081/assets/example/booklist-test.png?platform=ios&hash=6ffab54f1ce2fd718f05f696f0ed9fb7",
}
iOS에서 메트로의release를 통해 구축되지 않은 경우(Xcode의 Output을 통해 확인된 JSON이 아님){
__packager_asset: true,
width: 1000,
height: 1000,
scale: 1
uri: 'file:///Users/keima/Library/Developer/CoreSimulator/Devices/EE8E1339-DC30-4948-BE39-020E60874379/data/Containers/Bundle/Application/B915DC08-FD21-4528-A4E9-F76C9A071CEC/example.app/assets/example/booklist-test.png',
}
React Native의 Image 구성 요소를 통해 네트워크 파일을 얻었을 때 다음과 같은 실시 방식의 샘플이 있었지만, 여기서source에 전달된 유형과resolveAssetSource()
되돌아오는 유형은 공통점이 있다.<Image source={{
uri: 'https://reactnative.dev/img/tiny_logo.png'
}} />
또한 이 대상의 형식은 앞으로도 동일하다고 보장할 수 없다.앞으로는 이미지가sprite 형식(큰 그림 파일의 직사각형 영역의 모양을 가리키는 말)으로 되돌아오고,Image 구성 요소 등이 그것을 지원한다면 리퀘어만 사용하면 영향을 주지 않지만, 리퀘어가 되돌아오는 데이터 의존 구조가 되면 알 수 없다고 생각합니다.
또한 제3파티 라이브러리의 실시 예로
react-native-video
가 잘했다고 생각합니다.응용 실례
file:
PDF 파일을 모드 URL로 열기 (여기에 준비된 Native Module 사용) 를 위한 샘플 응용 프로그램 file
에서 패턴을 통해 복제 처리를 하는 것이 좋다.설치 예는 다음과 같다(많은 난잡함이 있을 수 있으나 샘플 응용에서만 사용할 수 있으니 양해해 주십시오).
import { Image } from 'react-native';
import RNSF from 'react-native-fs'
...
const FILEPATH_PDF = `${RNSF.DocumentDirectoryPath}/file.pdf`
...
const fileExists = await RNSF.exists(FILEPATH_PDF)
console.log('file status: exists:', fileExists)
if (!fileExists) {
// store file
const pdf = Image.resolveAssetSource(require('./file.pdf'))
console.log('pdf:', pdf) // <- resolveAssetSource のデータを見る
const uri = pdf.uri
if (uri.match(/^https?:/)) {
try {
await RNSF.downloadFile({
fromUrl: uri,
toFile: FILEPATH_PDF,
}).promise
} catch (e) {
console.warn('OpenPDF:', e)
return
}
} else if (uri.match(/^file:/)) {
try {
await RNSF.copyFile(uri, FILEPATH_PDF)
} catch (e) {
console.warn('OpenPDF:', e)
return
}
}
}
실제로는 잘 안 쓸 수도 있지만 알면 언젠가는 쓸모가 있을 거예요?그게 다야.
Reference
이 문제에 관하여(행동에서 React Native의 Require를 깊이 파고들다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/pside/articles/8813f8fc04bd34ae02aa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)