请教一个大胆又牛逼的想法!!!!



  • export default class Demoapp extends Component {

    // 构造
    constructor(props) {
    super(props);
    this.jsxSre=(<View> <Text>直接模块字符串</Text> </View>)
    }

    render() {
    return (
    <View style={styles.container} >
    {
    this.jsxSre
    }
    </View>
    );
    }
    }

    有哪位大神这样玩过的?有什么方法能解析出模块字符串



  • 如果你知道 jsx 会被编译成什么,以及 ReactElement 的一些细节,那么就很好理解了。为了方便解释我把你的 jsx 里的空格都去掉,因为空格会影响 children 的结构。

    首先,将 jsx 赋值到一个变量是很常见的做法,随便找都能找到一个例子:https://github.com/facebook/react-native/blob/master/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js#L173。

    其次,<View><Text>直接模块字符串</Text></View> 大概会被编译成
    React.createElement(View, null, React.createElement(Text, null, '直接模块字符串')),而 createElement 会返回一个构造好的 ReactElement,我就不解释 ReactElement 的细节了。如果你要访问 Text 里的字符串,那么正确的思路肯定不是解析,而是直接访问 this.jsxSre.props.children.props.children



  • @7c00 有没有什么库,能直接通过jsx字符串解析成组件的呢?我的构想是服务器直接获取jsx代码字符串,然后直接运加载运行起来,或者你有没有用过更好的react自有的函数或者第三方开源的库。



  • 我晕,react-native不是可以动态更新吗,搞这个又有什么意义?



  • @bolan9999 热更新,AppStore审核不过,搞这个只是偶然的看到一个帖子,想看看能不能实现而已。



  • 原来你说的是从 jsx 字符串解析呀,但你的代码里直接写 jsx 也太误导了,好歹写成 '<View> <Text>直接模块字符串</Text> </View>' 吧。

    这个话题我就不想讨论了,因为我绝对不会想这么做。如果你非要这么做,一个可能的方向是,利用现有的 jsx 解析模块。其实就算从 xml 解析,然后自己构造 ReactElement 也不算太复杂,但我估计作用域的处理是一大难题。



  • @7c00 那弱弱的问一句,现在react-native都用什么热更新呢?ios AppStore能通过的



  •  没研究过

  • administrators

    热更新服务codepush和pushy在过去和现在都一直正常通过审核


登录后回复