【发布时间】:2016-12-27 22:40:42
【问题描述】:
我对 react 和 redux 很陌生。我在 componentWillMount() 中加载了一个本地 json 文件,一个联系人列表。我也在将数据从文件复制到状态(在减速器中)。
但我正在执行一些操作,例如使用状态中加载的数据添加、删除和更新联系人。
我的问题是在第一次渲染后我希望从状态而不是从本地文件加载数据。我知道 componentWillMount 会从文件中加载数据,而不是从每次渲染的状态中加载。
我尝试使用不同的反应生命周期但失败了? 有办法吗?
简而言之,我希望从文件中加载数据以进行第一次渲染,并从状态中加载数据以进行后续渲染
export class ContactsIndex extends Component {
componentWillMount() {
this.props.fetchInitialContacts();
}
render() {........}
}
export function fetchInitialContacts() {
const request = axios.get(ROOT_URL);
return (dispatch) => {
request.then(({data}) => {
dispatch({ type: 'GET_INITIAL_CONTACTS', contactsListPayload:data })
});
}
}
【问题讨论】:
-
你的意思是,即使你刷新页面?还是只在正常导航中?。如果是正常导航,您可以使用 redux 并在您的 compoentWillMount 中放置一个条件,否则您需要将状态保存在某个地方。
-
我正在使用 react-routes。现在我的状态是这样的 const INITIAL_STATE = { contactsArray : [], singleContact: null };你的意思是我需要在状态中创建一个标志或一个额外的参数,例如 const INITIAL_STATE = { contactsArray : [], singleContact: null, intitailLoad: false };
-
您可以使用 contactsArray.length 如果 0 dispatch
GET_INITIAL_CONTACTS否则只需使用 contactsArray,它将保存值。但是如果你刷新页面,状态就会丢失。 -
解决了这个问题。谢谢。