设置 当我的组件安装完毕时,我的状态中有一个空数组的专辑。
我在做什么
在我的输入框中的每个输入上,我进行一次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
答案 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);
});
}
}