每次击键时都会调用API调用 - 与componentwillUpdate一起出现问题

时间:2017-03-22 12:17:54

标签: javascript reactjs

设置 当我的组件安装完毕时,我的状态中有一个空数组的专辑。

我在做什么

在我的输入框中的每个输入上,我进行一次API调用,返回一个相册列表,根据输入进行更改。我想将相册添加到数组而不改变旧数组。因此,在每次击键时,都应该创建一个新数组。

此外,更值得关注的是,由于我不能string connectionString = ConfigurationManager.AppSettings["MyDatabase"]; var conn = new SqlConnection(connectionString); conn.Open(); string query = @"my_stored_procedure"; using (var sqlAdpt = new SqlDataAdapter(query, conn)) { sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure; // Ex: Parameters if your sp takes one var dataDate = new SqlParameter { ParameterName = "@DataDate", Value = DateTime.Now }; sqlAdpt.SelectCommand.Parameters.Add(dataDate); var results = new DataSet(); sqlAdpt.Fill(results); List<Result> resultList = results.Tables[0].AsEnumerable(). Select(dataRow => new Result { myID = dataRow.Field<int>("ID"), myString = dataRow.Field<string>("column_I_cant_change") }).ToList(); } 因为这会导致无限循环,所以应该如何做呢? setState无法使用,因为每次按键都不会收到ComponentWillReceiveProps /

props

1 个答案:

答案 0 :(得分:1)

这里的解决方案非常简单。

将下一个albumName值与当前值进行比较,并仅在值不匹配时进行提取。

componentWillUpdate(nextProps, nextState) {
    if (this.state.albumName !== nextState.albumName) {
        axios.get('url', {
            params: { albumName: nextState.albumName}
        }).then((response) => {
            this.setState({
                albumName: [...response.data.items]
            });
        }).catch((error) => {
            console.log(error);
        });
    }
}