w3schools una txt por manejo listar linea leer example contenido carpeta archivos archivo javascript ios react-native

txt - listar archivos de una carpeta javascript



reaccionar variable de uso nativo para archivo de imagen (4)

Sé que para usar una imagen estática en react native necesitas hacer un requerimiento específico para esa imagen, pero estoy tratando de cargar una imagen aleatoria basada en un número. Por ejemplo, tengo 100 imágenes llamadas img1.png - img100.png en mi directorio. Estoy tratando de encontrar una manera de hacer lo siguiente

<Image source={require(`./img${Math.floor(Math.random() * 100)}.png`)}/>

Sé que esto no funciona intencionalmente, pero cualquier solución alternativa sería muy apreciada.


En JS, las declaraciones requeridas se resuelven en el momento del paquete (cuando se calcula el paquete JS). Por lo tanto, no se admite poner expresión variable como argumento para require .

En caso de requerir recursos, es aún más complicado. Cuando haya require(''./someimage.png'') , React Native packager localizará la imagen requerida y luego se incluirá junto con la aplicación para que pueda usarse como un recurso "estático" cuando su aplicación se esté ejecutando (en de hecho, en el modo de desarrollo, no incluirá la imagen con su aplicación, sino que la imagen se servirá desde el servidor, pero esto no importa en su caso).

Si desea utilizar una imagen aleatoria como recurso estático, deberá indicarle a su aplicación que agrupe esa imagen. Puedes hacerlo de varias maneras:

1) Agréguelo como un activo estático de su aplicación, luego haga referencia a él con <Image src={{uri:''name_of_the_image_in_assets.png''}}/> (así es como puede agregarlo a la aplicación nativa de iOS)

2) Requerir todas las imágenes por adelantado estáticamente. Algo en forma de:

var randomImages = [ require(''./image1.png''), require(''./image2.png''), require(''./image3.png''), ... ];

Luego, en su código, puede hacer:

<Image src={randomImages[Math.floor(Math.random()*randomImages.length)]}/>

3) Use la imagen de red con <Image src={{uri:''http://i.imgur.com/random.jpg''}}/>


Llegué a este hilo buscando una manera de agregar imágenes de forma dinámica. Rápidamente descubrí que pasar una variable a la Imagen -> require () no estaba funcionando.

Gracias a DerpyNerd por llevarme por el camino correcto.

Después de implementar los recursos en un lugar, me resultó fácil agregar las imágenes. Pero, todavía necesitaba una forma de asignar dinámicamente estas imágenes en función del estado cambiante de mi aplicación.

Creé una función que aceptaría una cadena de un valor de estado y luego devolvería la imagen que coincidía lógicamente con esa cadena.

Preparar

Estructura de la imagen:

app |--src |--assets |--images |--logos |--small_kl_logo.png |--small_a1_logo.png |--small_kc_logo.png |--small_nv_logo.png |--small_other_logo.png |--index.js |--SearchableList.js

En index.js , tengo esto:

const images = { logos: { kl: require(''./logos/small_kl_logo.png''), a1: require(''./logos/small_a1_logo.png''), kc: require(''./logos/small_kc_logo.png''), nv: require(''./logos/small_nv_logo.png''), other: require(''./logos/small_other_logo.png''), } }; export default images;

En mi componente SearchableList.js , importé el componente Imágenes de esta manera:

import Images from ''./assets/images'';

Luego creé una nueva función imageSelect en mi componente:

imageSelect = network => { if (network === null) { return Images.logos.other; } const networkArray = { ''KL'': Images.logos.kl, ''A1'': Images.logos.a1, ''KC'': Images.logos.kc, ''NV'': Images.logos.nv, ''Other'': Images.logos.other, }; return networkArray[network]; };

Luego, en la función de render mis componentes, llamo a esta nueva función imageSelect para asignar dinámicamente la imagen deseada en función del valor en this.state.network :

render() { <Image source={this.imageSelect(this.state.network)} /> }

Una vez más, gracias a DerpyNerd por llevarme por el camino correcto. Espero que esta respuesta ayude a otros. :)


Para cualquiera que conozca la bestia nativa de reacción, esto debería ayudar :)

También visité un par de sitios en el pasado, pero lo encontré cada vez más frustrante. Hasta que leí este sitio aquí .

Es un enfoque diferente, pero finalmente vale la pena al final. Básicamente, el mejor enfoque sería cargar todos sus recursos en un solo lugar. Considere la siguiente estructura

app |--img |--image1.jpg |--image2.jpg |--profile |--profile.png |--comments.png |--index.js

En index.js , puede hacer esto:

const images = { profile: { profile: require(''./profile/profile.png''), comments: require(''./profile/comments.png''), }, image1: require(''./image1.jpg''), image2: require(''./image2.jpg''), }; export default images;

En sus vistas, debe importar el componente de imágenes de esta manera:

import Images from ''./img/index''; render() { <Image source={Images.profile.comments} /> }

Todos tienen diferentes medios para un fin, solo elija el que más le convenga.

Da Man - P: ¿Cómo se usa esta respuesta con una variable?

Bueno, dado que require solo acepta una cadena literal, no puede usar variables, cadenas concatenadas, etc. Esta es la mejor opción. Sí, todavía es mucho trabajo, pero ahora puedes hacer algo parecido a la pregunta del OP:

render() { var images = { test100: "image100" }; return ( <View> <Text> test {images["test" + "100"]} </Text> </View> ); }


class ImageContainer extends Component { this.state ={ image:require(''default-img'') } <View> <Image source={this.state.image} /> </View> }

En el contexto de esta discusión, tuve este caso donde quería asignar dinámicamente imágenes para un fondo particular. Aquí cambio de estado así

this.setState({ image:require(''new-image'') })