javascript - 是否有可能获取道具并将其作为参数传递给函数?
问题描述
我试图通过 react-redux 的连接从 MapsStateToProps 获取道具,然后将其传递给子组件。该道具用作函数的参数,该函数负责返回某些内容,然后该内容成为子组件的状态。
我知道道具正在更新,因为我将它显示在子组件中,但是在它用作参数的地方它不会立即更新。我必须导航到另一个组件(react-routers),然后返回到原始组件以查看所需的结果,这是使用道具的功能的结果。
有没有办法让改变发生而不去另一个组件然后回来?显然我做错了什么,或者我想做的不是反应方式?有小费吗?
import React, { Component } from 'react';
import {connect} from "react-redux";
import filterData from "../../States/AllStates/filterData"
import BookComponent from "./BookComponent";
const mapStateToProps = state => {
return {
fmlProps: state.ReducerName.fmlProps
}
};
class Testing extends Component {
state = {
// this.props.fmlPropsdoesn't work right away. You need to go away then come back
// to see the desired result, which I want to avoid
XXX: filterData(this.props.fmlProps)
}
render() {
return (
<>
<h1>{this.props.fmlProps}</h1> {/* this show up correct */}
{this.state.XXX.map(FakeData => (
<BookComponent
key={FakeData.planNumber}
PNum={FakeData.planNumber}
PName={FakeData.planName}
/>))}
</>
);
}
}
export default connect(mapStateToProps, null) (Testing);
解决方案
当组件更新时,使用 componentDidUpdate 来检查和调用函数。
componentDidUpdate(prevProps) {
// Typical usage (don't forget to compare props):
if (this.props.fmlProps !== prevProps.fmlProps) {
//invoke function and setstate
const tmp = XXX: filterData(this.props.fmlProps)
this.setState({XXX})
}
}
更多在这里阅读 - https://reactjs.org/docs/react-component.html#componentdidupdate
推荐阅读
- dictionary - 法语语音词典
- javascript - 即使在控制台日志上定义了反应状态也是未定义的
- javascript - React:在动画期间调用 Render()。怎么了?
- r - 如何用一个向量制作一个由两个矩阵组成的数组?
- typescript - 使用参数对函数进行类型推断
- elasticsearch - 如何从输出中的elasticsearch中只获取一个字段?
- javascript - Javascript:当用户从树中选择/取消选择节点时如何保留树结构和祖父母关系
- handlebars.js - 如何在 bigcommerce 车把中显示 JS 变量?
- c++ - 这段代码如何不能解决 ABA 问题?
- java - 我应该使用什么来代替弃用的 CollectionModel?