Требуется функция, вызывающая ошибку "попытка изменить, чтобы изменить свойство только для чтения"
Я пытаюсь построить простой калькулятор на основе 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',
}
});
`