- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 React/Redux 新手,并且对状态有疑问。
TrajectContainer.jsx
class TrajectContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
trajects: props.trajects,
onClick: props.onClick
};
}
componentWillReceiveProps(nextProps) {
console.log('componentWillReceiveProps', nextProps);
this.setState(nextProps);
}
render() {
// When the componentWillReceiveProps is not present, the this.state will hold the old state
console.log('rerender', this.state);
return (<div className="col-md-6">
<h2>Trajects</h2>
<button className="btn btn-primary" onClick={this.state.onClick}>Add new Traject</button>
{this.state.trajects.map(traject => <Traject traject={traject} key={traject.name}/>)}
</div>)
}
}
const mapStateToProps = function (store) {
console.log('mapToStateProps', store);
return {
trajects: store.trajects
};
};
const mapDispatchToProps = function (dispatch, ownProps) {
return {
onClick: function () {
dispatch(addTraject());
}
}
};
export default connect(mapStateToProps, mapDispatchToProps)(TrajectContainer);
当reducer返回新状态时,组件将使用新数据重新渲染。
但是:如果我删除 componentWillReceiveProps 函数,则 render() 函数将具有旧状态。
我检查了mapStateToProps中收到的数据,这是新的New State。所以我不明白为什么我需要 componentWillReceiveProps 函数才能让渲染函数接收新数据。
我做错了什么吗?
最佳答案
如果您想使用新的 props 值更新状态值,则需要componentWillReceiveProps
,每当 props 值发生任何更改时都会调用此方法。
In your case why you need this componentWillReceiveProps method?
因为您将 props 值存储在状态变量中,并像这样使用它:
this.state.KeyName
这就是为什么您需要 componentWillReceiveProps
生命周期方法来使用新的 props 值更新状态值,只有组件的 props 值才会更新,但状态不会自动更新。如果您不更新状态,则 this.state
将始终拥有初始数据。
componentWillReceiveProps
:
this.props.keyName
现在,react 将始终在 render 方法中使用更新的 props 值,如果 props 发生任何更改,它将使用新的 props 重新渲染组件。
根据 DOC :
componentWillReceiveProps() is invoked before a mounted component receives new props. If you need to update the state in response to prop changes (for example, to reset it), you may compare this.props and nextProps and perform state transitions using this.setState() in this method.
React doesn't call componentWillReceiveProps with initial props during mounting. It only calls this method if some of component's props may update.
建议:
不要将 props 值存储在 state 中,直接使用 this.props
并创建 ui 组件。
关于reactjs - 何时使用 componentWillReceiveProps 生命周期方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46113044/
我正在使用使用 ReactSwipableView 包的 Material ui SwipeableViews,我在控制台上收到此错误 react-dom.development.js:12466 W
在我的其他类中,componentWillReceiveProps 工作得很好,但由于某种原因,它在这里没有触发。 ItemView.jsx class ItemView extends React.
我对 React 开发还很陌生,但我已经使用 React+Redux 开发了 3 个大项目,并且我看到了一个我非常不喜欢的模式: componentWillReceiveProps(nextProps
我在构造函数中定义了一个状态,就像这样 this.state={ datainaccordion:'', }; 现在在我的 componentWil
我有以下组件代码: var Answer = React.createClass({ getInitialState: function(){ return { comments:
我在 React 中遇到了一个大问题 - 可能是缺乏理解。我有一个进行回调的子组件,并具有一个 componentWillReceiveProps 函数。问题是我无法在 child 持有的文本输入上书
我最近想升级我的知识React ,所以我从组件生命周期方法开始。让我好奇的第一件事是这个componentWillReceiveProps .所以,文档说当组件接收新的(不一定是更新的) Prop 时
我有以下高阶组件来在我的组件上创建一个负载: import React, {Component} from 'react'; import PropTypes from 'prop-types'; i
我正在尝试在收到新 Prop 后立即更新子组件。但是,我的子组件中的 componentWillReceiveProps() 在 Prop 实际更新之前被调用。看完this article我明白为什么
在我的子组件中使用以下方法更新 Prop 更改状态,效果很好 componentWillReceiveProps(nextProps) { // update original state
我的直觉告诉我不行,但我很难想到更好的方法。 目前,我有一个显示项目列表的组件。根据提供的 props,此列表可能会发生变化(即过滤更改或上下文更改) 例如,给定一个新的 this.props.typ
所以我是 react 新手,想知道如何创建一个传递一些参数的页面并根据这些参数获取文档。但是,当我尝试使用 componentWillReceiveProps 时,我发现它没有运行,我不知道为什么。那
我是 React 新手,正在经历 React 的生命周期,但是我对 componentWillReceiveProps 的使用有点困惑。 谁能解释一下在什么情况下应该使用它。 谢谢。 最佳答案 当 p
我有一个由react-router (path="profile/:username") 加载的Profile 组件,该组件本身如下所示: ... import { fetchUser } from
这个问题已经有答案了: Can getDerivedStateFromProps be used as an alternative to componentWillReceiveProps (1 个
我通读了https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-p
我是 React/Redux 新手,并且对状态有疑问。 TrajectContainer.jsx class TrajectContainer extends React.Component {
我有一个组件,它由父组件通过传递 prop 来更新。在 componentWillReceiveProps 中,我想更改一个状态(availableData),其中包含来自 prop(newData)
在我拥有的组件中,我使用 componentWillReceiveProps() 异步设置组件中的多个状态。父组件正在向该子组件发送新的 props。我的期望是,每当 child 获得新的 Prop
我有一个连接到 redux 存储的组件,并且有一个如下所示的代码块: if (this.props.person !== nextProps.person) { ... } else {
我是一名优秀的程序员,十分优秀!