创建动态生成组件中的本机应用程序,开发和生产差异

时间:2018-06-17 17:52:12

标签: android react-native create-react-native-app

我在create-react-native-app中动态创建组件。一切正常,使用expo应用程序在开发模式下使用npm start进行测试,并连接到Android手机。

如果我将其切换到生产模式,或尝试将apk构建为独立应用程序,则不会在按钮上创建对象。

这是我的第一个使用React Native的项目,我不知道如何调试它。 我也一直无法找到任何有关这两种模式之间可能存在差异的信息。

这里有相关代码:

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.updateState = this.updateState.bind(this);
    this.state = {
      knobs: [],
      key: 1
    }
  }

  add = () => {
    let key = this.state.key + 1
    let knob = (<Object key={key} updateState={this.updateState}/>);
    let knobs = this.state.knobs;
    knobs.push(knob);
    this.setState({knobs: knobs, key: key})
  }

  render = () => {
    return ([<View>
      {this.state.knobs}
      <Button onPress={() => this.add()} title='add thing'/>
    </View>
      ]);
  }
}

2 个答案:

答案 0 :(得分:1)

我不确定导致问题的原因,因为我们没有任何类型的错误消息,但下面的代码片段可能会有所帮助。

当您指定如下的变量时;

let knobs = this.state.knobs;

您没有创建新变量,而是创建对原始属性的引用。因此,你改变了状态。这可能会导致问题。

要设置与当前状态值相关的新状态值,您可以使用functional setState syntaxdestructuring assignment。它更容易使用,更容易阅读。

add = () => {
  this.setState((prevState) => {
    const { knobs, key } = prevState; // deconstruct array and key from state
    const newKnob = (<Object key={(key + 1)} updateState={this.updateState}/>);
    knobs.push(newKnob); // push new item to array
    return { knobs, key: (key + 1) } //return new state values
  });
}

答案 1 :(得分:0)

哦,最后我重写了整个部分。

将要创建的对象移动到渲染功能中。

public class CBigDecimalTest
{
     public static void main(String []args)
     {
        CBigDecimal extendedBigDecimal = new CBigDecimal(new BigDecimal(50));

        System.out.println("percentage: " + extendedBigDecimal.percentage(50).doubleValue());
        System.out.println("doubleValue: " + extendedBigDecimal.doubleValue());
     }
}

此功能在生产模式和App中按预期运行;)