反应原生chrome调试器打破了应用程序

时间:2016-03-18 02:15:26

标签: reactjs react-native

我有一个反应原生样本,在模拟器中工作正常。但是当我尝试在chrome中调试它时,它就会停止工作。

我正在使用Navigator,第一页是问候语,工作正常。 当我启用调试时,行为是这样的: 转到第一页,一切都很好。 点击进入按钮进入应用程序,我可以在chrome中查看来自我的渲染功能的消息,但没有视觉上的变化 再次单击相同的按钮,给出错误: 很多

  

警告:flattenChildren(...):遇到两个孩子一样   键,.0:$0。子键必须是唯一的;当两个孩子分享一个   键,只会使用第一个孩子。

最后

  

异常' shadowView(针对ID 19)未找到'在调用时被抛出   使用params在目标RCTUIManager上替换ExistingNonRootView(       19,       446)

可能导致错误的组件如下(它是棋盘)

var Dimensions = require('Dimensions');
var fen = require('../logic/fen');
var windowSize = Dimensions.get('window');


import React, {
    AppRegistry,
    Component,
    TouchableHighlight,
    StyleSheet,
    Text,
    View
} from 'react-native';

const Square = require('./square');
const Piece = require('./piece.component');
const CONSTANTS = require('./constants');
var squares = [];
var pieces = [];
var createRow = function(i, width) {
    for (let j = 0; j < 8; j++) {
        squares.push(<Square width={width} key={i*10+j} row = {i} column = {j} onSquareSelected = {this.squareSelected}></Square>
        );
    }
}
var createBoard = function(width) {
    for (let i = 0; i < 8; i++) {
        createRow(i, width);
    }
};

const Board = React.createClass({

    componentWillMount() {
       this.pieceWidth = this.props.width/8;
       createBoard(this.pieceWidth);
       this.createPieces();

    },
    createPieces(){
        console.log('Creating pieces');
        let pieceDefinitions =  fen.read(fen.initial);
        pieces = [];
        var key = 0;
        for(let p in pieceDefinitions){

            key = key +1 ;
            console.log('piece key is ' + key)
             pieces.push(
                    <Piece key={key} width ={this.pieceWidth} coordinate={p} color = {pieceDefinitions[p].color} 
                    role = {pieceDefinitions[p].role}>
                 </Piece>
             )
        }
        return pieces;
    },
    squareSelected(row, column) {
        console.log("Row", row, "Column", column, "selected");
    },
    getInitialState() {
        return { selectedPiece: null }
    },

    render() {
        return (
            <View style={[styles.container, {width : this.props.width ,height: this.props.width}]}>
                {squares}
                {pieces}
            </View>
        )
    }
});

const styles = StyleSheet.create({
    container: {
        marginTop : 20,
        backgroundColor: '#F5FCFF',
        flexDirection: 'row',
        flexWrap: 'wrap',
    }
})

module.exports = Board;

1 个答案:

答案 0 :(得分:3)

显然,任何使用let的RN代码都会在Chrome调试器中完全中断。没有解决方案。我们搞砸了。我相信RN使用的转换程序在封闭中包含每个包含一个let的块,突然this就像_this2一样,但Chrome调试器不知道