反应状态最初包含正确的数据,但被先前的值覆盖

时间:2019-03-06 16:14:06

标签: reactjs

i具有一个状态变量,该状态变量最初设置为null。从服务器获取数据后,我更新其状态。这样做..它为具有不同ID的项目加载正确的数据。但是,在打开之前打开的项目时,将状态设置为正确的值。但是,它随后用先前打开的项目覆盖状态值。

我不确定出了什么问题。

下面是代码,

/path/to/python3

有人可以帮我解决这个问题吗?谢谢。

编辑:这是我第一次运行应用程序时第一次单击某个项目时输出的样子。

enter image description here

现在,当我单击ID为8的另一个项目时,它会输出正确的数据(来自数组25的输出状态),但是将其替换为先前的项目详细信息(来自数组806的输出状态)。

enter image description here

2 个答案:

答案 0 :(得分:0)

您的代码可能有错字:

    load_item_details = () => {
const file_name = 'item_details.json';
client.get_item_details_file(this.props.item_id, file_name, 'json')
    .then((request) => {
        this.setState({item_detail: request.response});
    })};
}

应为this.setState({item_details: request.response})

答案 1 :(得分:0)

第二个日志中有@Test public void test() { MockedBean mb = new MockedBean(); MockedBean spy = Mockito.spy(mb); when(spy.mockedMethod()).thenReturn("THE MOCKED VALUE"); log.info("{}", spy.mockedMethod()); log.info("{}", spy.notMockedMethod()); } item_id inside method 1。看起来您同时发送两个具有不同ID的请求。由于item_id = 1的数据远大于item_id = 8的数据,因此它稍后到达并覆盖所有内容。尝试仅在需要时才调用item_id inside method 8,并使用一些标志来阻止同时请求。

load_item_details

请注意,... this.state = { item_details: null, isLoading: false, }; ... componentDidUpdate(PrevProps) { if (PrevProps.item_id !== this.props.item_id) this.load_item_details(); } ... load_item_details = () => { if (this.state.isLoading) return; const file_name = 'item_details.json'; this.setState({isLoading: true}); client.get_item_details_file(this.props.item_id, file_name, 'json') .then((request) => { this.setState({item_details: request.response, isLoading: false}); })}; } 正在获取数据时,此代码将不会对item_id进行任何更改。并且它将在load_item_details内部出错时中断。