没有测量功能,无法将具有YogaNode的孩子添加到父母

时间:2018-08-11 18:54:29

标签: javascript reactjs react-native

我遇到了这个问题,也许你们中有人遇到了这个问题,并且知道解决方案?我看了一下互联网并检查了我的标签,没有标签就没有文字

Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'RCTRawText [text: ;]' to a 'RCTView')
    addChildAt
        ReactShadowNodeImpl.java:279
    addChildAt
        ReactShadowNodeImpl.java:56
    setChildren
        UIImplementation.java:482
    setChildren
        UIManagerModule.java:441
    invoke
        Method.java
    invoke
        JavaMethodWrapper.java:372
    invoke
        JavaModuleWrapper.java:160
    run
        NativeRunnable.java
    handleCallback
        Handler.java:739
    dispatchMessage
        Handler.java:95
    dispatchMessage
        MessageQueueThreadHandler.java:29
    loop
        Looper.java:148
    run
        MessageQueueThreadImpl.java:192
    run
        Thread.java:818

代码:Albumlist.js 这是为了显示所有相册

import React, { Component } from 'react';
import { View } from 'react-native';
import axios from 'axios';
import AlbumDetail from './AlbumDetail.js';

class AlbumList extends Component {
    state = {albums: [] } ;

    componentWillMount(){
        axios.get('https://rallycoding.herokuapp.com/api/music_albums')
        .then(response => this.setState ({ albums : response.data }));
    }


    renderAlbums = () => { 
        return this.state.albums.map(albums =>
             <AlbumDetail key = {albums.title} albums={albums}/>
            );
    }

    render(){
        console.log(this.state);
        return (
            <View>
               {this.renderAlbums()}
            </View>
    );
    }
}

export default AlbumList;

AlbumDetail.js 这是一张专辑详情卡

import React from 'react';
import { Text, View } from 'react-native';
import Card from './Card';
import CardSection from './CardSection';


const AlbumDetail = (props) => {
    return (
        <Card>
            <CardSection>
                <View />
                <View style = {styles.headerContentStyle}>
                    <Text>{props.albums.title}</Text>
                    <Text>{props.albums.artist}</Text>  
                </View>;
            </CardSection>      
        </Card>
    );
};

const styles= {
    headerContentStyle: {
        flexDirection: 'column',
        justifyContent: 'space-around'
    }
};

export default AlbumDetail;

Card.js 这是样式的包装

import React from 'react';
import { View, Platform } from 'react-native';

const Card = (props) => {
    return (
        <View style={styles.containerStyle}>
        {props.children}
        </View>
    );
};

const styles = {
    containerStyle:{
        borderWidth: 1,
        borderRadius: 2,
        borderColor: '#ddd',
        borderBottomWidth: 0,
        ...Platform.select ({
            ios: {
                shadowColor: '#000',
                shadowOffset: {width: 0, height : 2},
                shadowOpacity : 0.1, 
                shadowRadius: 2,
            }, 
            android: {
                elevation: 1
            }
        }),
        marginLeft: 5,
        marginRight: 5,
        marginTop: 10
    }



};

export default Card;

CardSection.js 这是单个Card区域的包装器,因此看起来更好

import React from 'react';
import { View } from 'react-native';

const CardSection = (props) => {
    return (
        <View style= {styles.containerStyle}>
            {props.children}
        </View> 
    );
};

const styles = {
    containerStyle: {
        borderBottomWidth:1,
        padding: 5,
        backgroundColor: '#fff',
        justifyContent: 'flex-start',
        flexDirection: 'row',
        borderColor: '#ddd',
        position: 'relative'
    }
};

export default CardSection;

1 个答案:

答案 0 :(得分:4)

您的AlbumDetail Card中有一个错字,导致;没有在Text标签内进行渲染,这导致了所显示的错误。

<View style = {styles.headerContentStyle}>
     <Text>{props.albums.title}</Text>
     <Text>{props.albums.artist}</Text>  
</View>; // <= here