当前位置: 首页 > 知识库问答 >
问题:

反应道具和反应原生道具行为不同吗?

左博学
2023-03-14

在本页React Native State on React Native docs中,我们有以下语句:

道具由父级设置,并且在组件的整个生存期内都是固定的。

但是,在本页React文档上的React State and Lifecycle中,我们有以下声明:

因为this.props和this.state可能是异步更新的,所以不应该依赖它们的值来计算下一个状态。

我的误解在哪里?对我来说,当组件从DOM中移除时,组件的生命周期就结束了。因此,给定第一条语句,我不仅可以在render方法上访问组件的任何部分的this.props值,但这不是第二条语句所说的。

共有1个答案

贺君浩
2023-03-14

第二个语句只是说,您不应该使用this.propsthis.state来更新状态,因为react将批处理多个更新。如果你这样做:

class MyComp extends React.Component{
    constructor(props) {
        super(props);

        this.state = {
            aValue: 0,
        };
    }

    componentDidMount() {
        this.setState({aValue: this.state.aValue + 1}); // should be 1 now
        this.setState({aValue: this.state.aValue + 1}); // should be 2 now
    }

    render() {
        return (
            <p>{this.state.aValue}</p>
        );
    }
}

如果执行此操作,则可能出现以下状态:{avalue:1},因为react将批处理您的更新,导致第二次更新覆盖第一次更新,因为this.state.avalue在第二次调用setstate()时尚未更新,仍然是0

相反,您必须将一个函数传递给setstate(),该函数将传递新的状态和道具并返回下一个状态:

this.setState((nextState, nextProps) => ({aValue: nextState.aValue + 1}));

没有提到您可以在哪里访问this.statethis.props

 类似资料:
  • 我试图理解下面的反应HOC; 下面是另一个组件; 具体来说我是想了解 如果它“DisplayTheCret”访问道具“secretToLife”或WrappedComponent?正确看待这一问题的方法是什么? “const WrappedComponent=withSecretToLife(displaytescret);”行位于“const displaytescret=props”行之后=

  • 悬而未决...

  • 我试图通过反应路由器将道具从一个组件传递到另一个组件。当我试图从子组件获取道具时,我得到了这样一条消息。这是我的代码: Tracks.jsx: app.jsx: Album.jsx:

  • 当设置组件的初始状态时,使用通过道具传入的数据,我是否应该创建一个新的对象,执行类似于... 或者这样做是安全的...

  • 我有一个React组件,它获取一个配置对象作为道具,它看起来像这样: 在某些情况下,我希望通过使用传入另一个对象来禁用组件显示的功能,如下所示: 这工作正常,不是问题。 但是,我还希望确保使用我的组件的客户端代码提供正确的配置对象: 如果active为true,则需要foo 如果active为false,则foo是可选的,不需要提供 我如何为这样的情况定义道具类型? 我试过: 但这给了我以下警告:

  • 我对这个问题很疯狂... 首先,我对React还是新手,其次,在发布之前,我尝试过:在React router v4中将自定义道具传递给路由器组件,React子组件不接收道具 但是运气不好... 我试图实现的是简单地将路由添加到现有的React项目中。 例如,顶级(父级)类如下所示: 注意:错误位于属性“getProfiles”在类型“Readonly”上不存在 儿童班: } 所以我不知道如何传递