如何使用字符串或状态动态切换反应组件?

Posted

技术标签:

【中文标题】如何使用字符串或状态动态切换反应组件?【英文标题】:How can I dynamically switch react components using a string or state? 【发布时间】:2017-05-24 02:17:56 【问题描述】:

希望下面的脚本能大致显示我想要实现的目标。

但本质上,使用存储在状态中的字符串,能够让组件持有者在更改时动态加载不同的组件。

因此您会在顶部看到 2 个导入的组件(但理想情况下,这些组件可能是 100 个不同的组件。

一个currentSlide 状态,包含组件的字符串名称。

还有一个 SlideLoader 组件,它可以根据字符串名称理想地加载导入的组件。

然后按钮通过重置状态名称来切换组件。

谢谢!

import React,  Component  from 'react';
import 
  View,
  Text,
  StyleSheet,
 from 'react-native';

import SlideA from './slideA';
import SlideB from './slideB';

const styles = StyleSheet.create(
  dummyContainer: 
    flex: 0,
    alignItems: 'center',
    justifyContent: 'center',
    position: 'absolute',
    top: 0,
    bottom: 0,
    left: 0,
    right: 0,
    backgroundColor: '#999999',
  ,
  buttonHolder: 
    position: 'absolute',
    top: 4,
    left: 0,
  ,
  button: 
    height: 50,
    width: 300,
    backgroundColor: 'red',
    marginBottom: 4,
    textAlignVertical: 'center',
    textAlign: 'center',
    fontWeight: 'bold',
  ,
);

export default class Switcher extends Component 
  constructor(props, context) 
    super(props, context);
    let state = 
      currentSlide: 'SlideA',
    
  

  render() 
    // obvisously wrong part...
    let SlideLoader = this.state.currentSlide;
    // end of obvisously wrong part...

    return (
      <View
        style=[
          styles.dummyContainer,
        ]
      >

        <SlideLoader />

        <View
          style=styles.buttonHolder
        >
          <Text
            onPress=() => 
              console.log('SLID A');
              setState( currentSlide: 'SlideA' );
            
            style=[styles.button]
          >
            Slide A
          </Text>
          <Text
            onPress=() => 
              console.log('SLID B');
              setState( currentSlide: 'SlideB' );
            
            style=[styles.button]
          >
            Slide B
          </Text>
        </View>
      </View>
    );
  

【问题讨论】:

【参考方案1】:

好的,我们开始吧:

 render() 
    let SlideLoader;
  if(this.state.currentSlide == 'SlideA')
  SlideLoader=<SlideA />
  else
  SlideLoader=<SlideB />

    return (
      <View
        style=[
          styles.dummyContainer,
        ]
      >

        SlideLoader

        <View
          style=styles.buttonHolder
        >
          <Text
            onPress=() => 
              console.log('SLID A');
              setState( currentSlide: 'SlideA' );
            
            style=[styles.button]
          >
            Slide A
          </Text>
          <Text
            onPress=() => 
              console.log('SLID B');
              setState( currentSlide: 'SlideB' );
            
            style=[styles.button]
          >
            Slide B
          </Text>
        </View>
      </View>
    );
  

干杯:)

【讨论】:

谢谢你,这正是我想要的! 欢迎兄弟:)

以上是关于如何使用字符串或状态动态切换反应组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应中使用redux中的布尔状态值渲染组件?

反应钩子如何确定它们的组件?

如何在反应组件(打字稿+ css)中使用向上和向下键切换div焦点

vue3动态组件为啥只能点击切换一次组件

如何使用从子组件传递给组件的反应变量更新 redux 状态

如何让反应路由器响应 404 状态码?