我想在加载组件时进行api调用。我有以下代码:
import React, { Component } from "react";
import { connect } from "react-redux";
import { getProfileDetails } from "../store/actions/profileAction";
class ProfilePage extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
this.props.getProfileDetails(this.props.currentUser.user, "");
console.log("COMPONENTDIDMOUNT");
}
render() {
var { currentUser, getProfileDetails, profile } = this.props;
return (
<React.Fragment>
<h1>Profile Page for {currentUser.user.username} !!</h1>
</React.Fragment>
)
}
}
function mapStateToProps(state) {
return ({
currentUser: state.currentUser,
profile: state.profile
})
}
export default connect(mapStateToProps, { getProfileDetails })(ProfilePage);
getProfile细节功能:
export function getProfileDetails(user, detail) {
return dispatch => {
return apiCall("get", `/api/users/profile/${user.id}/${detail}`)
.then(profileDetail => {
dispatch(setCurrentProfile(profileDetail, detail));
dispatch(removeError());
})
.catch(err => {
dispatch(addError(err.message));
})
}
}
在这里,函数"getProfile细节"正在进行api调用,然后调度一个redux存储操作,该操作正在设置配置文件细节。
问题是,每次调用getProfile细节时,redux存储都会更新,组件会重新渲染,这反过来会触发组件didMount,并进入无休止的循环。
请建议如何构造这个。
您应该使用mapDispatchToProps
而不是MapStateTops
。后者仅使用现有状态更新组件。
看起来您提到的问题在react-redux文档中讨论过https://redux.js.org/faq/react-redux#react-rendering-too-often.这可能有助于您调试。
请从中提供代码/存储/actions/profileAction
文件。
如果状态属性发生更改,您希望捕获的状态属性是什么?例如,如果您只想在currentUser
更改时调用新的fetch,则可以执行以下操作:
componentDidUpdate(prevProps) {
if (prevProps.currentUser !== this.props.currentUser)
this.props.getProfileDetails(this.props.currentUser.user, "");
}
您需要在componentDidMount
中以不同的方式初始化数据,类似于从状态获取数据。然后,仅当用户更改时才重新获取详细信息。
问题内容: 以下是React中的反模式吗?我喜欢这种模式,因为当实例化一个组件时,它在静态函数中为我提供了上下文。然后,我可以导入该类并调用静态方法来修改状态。还是可以通过更好的方式来完成? 问题答案: 显然,这取决于条件,可能是一种反模式,也可能是一个错误。静态类方法不应与类实例一起使用。绑定到特定的组件实例和用途,这只能证明类是单例是合理的(尽管单例也经常是反模式)。如果期望有多个类实例,那么
问题内容: 我正在使用带有react的ES6 babel,现在对于较新版本的react,react DOM不再是它的一部分。我对以下代码的怀疑是,这是第一行吗?因为我无处需要React,但最后一行需要ReactDOM。 问题答案: 从版本开始,React 分为两个部分: React 和 ReactDOM。 您正在使用。因此,对您而言,在组件中绝对有意义。但是就React而言,尽管您不是直接使用Re
问题内容: 我正在尝试使用Lodash来对一个函数进行去抖动,并且在调用该函数时,它似乎根本没有对其进行去抖动。我的问题似乎与我在SO上其他地方看到的错误不一样(通常是,他们没有调用返回的函数)。 我当前的超简单实现如下(在Angular中使用CoffeeScript): 在JS中,我相信是这样的: 我通过在输入框中键入内容来运行,如果我很快键入乱码,则控制台会在每次按键时每秒打印多次“发出搜索请
我的导航不工作,因为某些原因,我有另一个应用程序运行良好,但这一个不能找到错误,请帮助 反应路由器不工作。反应JS 我需要你的帮助。 使用react-router,我可以使用Link元素创建由react router本地处理的链接。
我正在使用JWT创建和验证令牌,并将令牌存储在cookie中。(react前端vs Nodejs后端) 我对react cookie与universal cookie和react cookie的用法感到困惑。 这些之间有什么区别,在后端设置cookie与在前端设置cookie有什么区别?
建立成功 总时间:2分钟6.65秒运行C:\Users\arnold\AppData\Local\Android\sdk/平台工具/adb-s 192.168.95.101:5555反向tcp:8081 tcp:8081无法运行adb反向:spawnSync C:\Users\arnold\AppData\Local\Android\sdk/平台工具/adb eNONT在192.168.95.10