Требуется функция, вызывающая ошибку "попытка изменить, чтобы изменить свойство только для чтения"

Я пытаюсь построить простой калькулятор на основе Android с использованием Reaction-native. я установил библиотеку mathjs в мои node_modules. однако всякий раз, когда я пытаюсь импортировать его с помощью метода require(), он генерирует следующую трассировку стека ошибок: mathjs импортируется всякий раз, когда нажимается кнопка =. вот мой код App.js:

import React, { Component } from 'react';
import {
   StyleSheet, View, TouchableOpacity,
 TextInput, Dimensions,Text
} from 'react-native';
import InputButton from './template.js';

const keyNames = [
 [1, 2, 3, '+'], 
 [4, 5, 6, '*'],
 [7, 8, 9 ,'-'], 
 ['.', 0, '=', '/'],
 ['sin()', 'cos()', 'tan()', 'DEL'], 
 ['(', ')', 'lg()', 'sqrt(x)']     
]; 


export default class App extends Component<Props> {
 
 constructor(props) {
  super(props);

  this.state = {Value: 0}; 
 }
 render() {
  return (
   <View style={styles.container}> 
    <View style={{flex: 2, backgroundColor: 'powderblue'}}>
     <Text style={styles.display}>{this.state.Value}</Text>
    </View> 

    <View style={{flex: 6, flexDirection:"column"}}>
     {this._renderInputButtons()}
    </View>
   </View> 
  );
 }
 _renderInputButtons() {
  let views = [];

  for (var r = 0; r < 6; r ++) {
   let inputRow = []; 
   
   for (var i = 0; i < 4; i ++) { 
    inputRow.push(
     <InputButton 
      value={keyNames[r][i]}  
      key={r + "-" + i} 
      // binding of react-native method with button for dynamic behavior.
      onPress = {this.updateDisplay.bind(this, keyNames[r][i])}
     />
    );
   }
   views.push(
    <View style = {{flexDirection:"row"}} key={r}>
      {inputRow}
    </View>
   ); 
  }
  return views;
 }

 updateDisplay(keyValue) {
  var temp; 

  switch (typeof keyValue) {

            case 'number':
    if (typeof this.state.Value === 'string') // check if the current state is in string format or not. 
     temp = this.state.Value   + keyValue; 
    else 
     temp = (this.state.Value * 10)  + keyValue; // without 10, values simply get added not concatenated. 
    break;  
 
   case 'string':
    switch(keyValue) {

     case 'cos()':
      if (this.state.Value === 0) {
       temp = "cos(" ; 
      }
      else {
       temp = this.state.Value + "cos(" ; 
      } 
      break;

     case 'sin()':
      if (this.state.Value === 0) {
       temp = "sin(" ; 
      }
      else {
       temp = this.state.Value + "sin(" ; 
      }
      break;

     case 'tan()':
      if (this.state.Value === 0) {
       temp = "tan(" ; 
      }
      else {
       temp = this.state.Value + "tan(" ; 
      } 
      break;

     case 'sqrt':
      if (this.state.Value === 0) {
       temp = "sqrt(" ; 
      }
      else {
       temp = this.state.Value + "sqrt(" ; 
      }
      break;

     case 'lg()':
      if (this.state.Value === 0) {
       temp = "log(" ; 
      }
      else {
       temp = this.state.Value + "log(" ; 
      }
      break;
      
     case '=':
      //TODO resolve mathjs import error. 
      var math = require('./node_modules/mathjs');
      temp =  math.eval(this.state.Value); 
      break;
     case 'DEL':
      temp = 0 ; 
      break;
     default:
      temp = this.state.Value + "" + keyValue;
      break; 
    }
    break;
     
  }
  this.setState({ Value: temp});
 }
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
 },
 display: {
  fontSize: 55,
  alignItems: 'flex-end',
 }
});

`

0 ответов

Другие вопросы по тегам