小编Øyv*_*tad的帖子

在ReactJs组件中替换状态时如何避免"具有相同键的子"

我创建了一个React组件,它给出了一组给定一组id的子元素.id数组保持在父组件的状态,然后我根据id运行一些ajax调用来获取要呈现的数据.获取的数据存储在该状态的单独数据阵列中.呈现的组件使用id作为键.

id可以根据组件外部的操作进行更改,因此我在组件上使用setState来替换数组.更新的id-state可能包含一些与原始数组中相同的ID. 同时我清空'数据数组',以便再次渲染所有内容.

当我这样做时,我有时会得到关键警告:

警告:flattenChildren(...):遇到两个孩子用同一把钥匙.子键必须是唯一的; 当两个孩子共用一把钥匙时,只会使用第一个孩子.

新数组不包含任何重复项.那么为什么会发生这种情况,我该怎么做才能避免这种情况呢?

编辑:按要求添加了一些代码.注意:我使用的是Infinite Scroll模块.这会导致它吗?

初始状态:

getInitialState: function() {
  return {
    hasMore: true,
    num: 0,
    movieIds: this.props.movieIds,
    movies: []
  };
},
Run Code Online (Sandbox Code Playgroud)

渲染功能:

render: function() {
  var InfiniteScroll = React.addons.InfiniteScroll;

  return (
    <InfiniteScroll
        pageStart={0}
        loadMore={this.loadMore}
        threshold='20'
        hasMore={this.state.hasMore}>
        <ul className="movieList">
          {this.state.movies}
        </ul>
    </InfiniteScroll>       
);
}
Run Code Online (Sandbox Code Playgroud)

简化加载更多:

comp = this;
$.ajax( {
  url: url,
  contentType: "json",
  success: function (data) {
    var m = createMovieLi(data);
    var updatedMovies = comp.state.movies;
    updatedMovies[num] = m;
    comp.setState({movies: updatedMovies});
  } …
Run Code Online (Sandbox Code Playgroud)

reactjs

32
推荐指数
2
解决办法
3万
查看次数

是否可以使用Google Optimize在Javascript中读取ExperimentId和VariationId?

我使用Google Optimize创建了A/B测试.现在我想在Javascript中阅读当前的ExperimentId和variationId.我的目标是根据给定的变体运行不同的javascript.

我似乎无法在文档中找到任何相关信息.可能吗?

javascript google-analytics-api google-optimize

24
推荐指数
3
解决办法
6940
查看次数

将模块版本作为命令行参数发送到SBT

我正在使用TeamCity运行一个bash脚本,该脚本利用SBT Native Packager将图像发布到Docker.bash脚本的sbt部分看起来像这样:

sbt -DdockerRepository=$repo -DpackageName=$packageName -D myproject/docker:publish
Run Code Online (Sandbox Code Playgroud)

我想将TeamCity内部版本号作为版本号传递给我的包.今天我在build.sbt的设置中手动指定版本号:

settings(
  version := "0.20",
  ....,
  dockerBaseImage := "example.com:5000/linux/java8:latest",
  dockerRepository in Docker := Some("example.com/myoldrepo"),
  dockerUpdateLatest := true'
)
Run Code Online (Sandbox Code Playgroud)

我希望能够这样做:

activator -Dversion=0.21 -DpackageName=myproject -D myproject/docker:publish
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.然而像我上面那样重写dockerRepository是有效的.

如何从命令行/ TeamCity将所需的版本号传递到SBT?

scala sbt sbt-native-packager

2
推荐指数
1
解决办法
2042
查看次数