小编L B*_*ker的帖子

React 中父状态发生变化时停止重新渲染子组件

我有一个 React 组件 Activity,带有一个 DataTable 和一个 Drawer(来自 Material UI)。我根据isDrawerOpenActivity 组件状态的属性设置抽屉是否打开。然而,当isDrawerOpen更新时,Activity、Drawer、DataTable都会重新渲染。

我不想DataTable重新渲染,因为什么都没有改变。我尝试在 DataTable 功能组件中使用React.memo并尝试useEffect结合使用useRef,以便在 props 相同的情况下不重新渲染。它不起作用。当这个子组件的任何 props 都没有改变时,如何防止它重新渲染?

const Activity = props => {
   const [isDrawerOpen, setIsDrawerOpen] = useState(false);
   const [tableData, setTableData] = useState(["banana", "orange", "apple"]);

   return (
      <div>
        <DataTable data={tableData} onRowClick={() => setIsDrawerOpen(true) } />
        <Drawer open={isDrawerOpen}>Some Drawer Content </Drawer>
      </div>
   )
}
Run Code Online (Sandbox Code Playgroud)

reactjs

14
推荐指数
1
解决办法
7966
查看次数

如何阻止线程继续执行无限循环

我有一个方法可以在执行 Groovy 脚本后返回 HTTP 响应。我创建了一个匿名线程来执行 Groovy 脚本。但是,作为预防措施,我希望线程在 3 秒后停止,以防止不良脚本(即:无限循环)继续运行。

public Response runScript(String script) {
    GroovyShell shell = new GroovyShell();
    Thread thread = new Thread() {
       public void run() {
           Script validatedScript = shell.parse(script);
           validatedScript.run();
       }
    };
    thread.start();
    thread.join(3000);
    return Response.ok("It ran!", MediaType.TEXT_PLAIN).build();
}
Run Code Online (Sandbox Code Playgroud)

此代码适用于没有无限循环的脚本。但是,如果存在无限循环,则响应“It ran!” 已交付给客户端,但线程仍处于活动状态。我如何在之后杀死这个线程join()

java groovy multithreading java-threads

5
推荐指数
1
解决办法
3116
查看次数

在Angular2中显示JSON值

我正在测试在Angular2中编写一个简单的应用程序来显示城市的天气.我创建了一个服务,当用户键入城市并提交表单时,从OpenWeatherMap检索JSON数据.在我的服务中,我有:

getDummyWeather() {
    return {"weather":{"main":"nice and sunny!"}};
}
Run Code Online (Sandbox Code Playgroud)

我将数据存储为weather我的组件中调用的JSON对象.我想我的模板中的调用来获取main的字符串{{weather.weather.main}}然后我得到错误,说明main无法从undefined中检索该值.显然,在我提交表单之前,它是未定义的.当我提交表格时,没有任何反应.所以然后我尝试了{{weather.main}},我没有收到任何错误,但我也没有得到任何数据.如果我将JSON字符串化,我会在表单提交时显示完整的JSON字符串.{{weather}}在表单提交上使用display [Object object].

如何从JSON对象获取数据以在Angular2中的模板中显示?

json angular

3
推荐指数
1
解决办法
2198
查看次数

如何将多个JS promises链接到组合布尔结果

我正在尝试在我的页面上验证各种元素及其数据.我有3种不同的方法来完成验证,其中一些方法可以进行ajax调用.每一个都返回一个布尔值的承诺.我想将结果合并为一个变量.我认为以下代码工作正常,但我的isValid变量似乎只捕获最后一个调用函数的值,saveCurrentSource().我如何才能isValidsaveSourceResponse()&& validateSource()&& 的结果相等saveCurrentSource()

async validate() {
  return new Promise(resolve => {
    let isValid = this.saveSourceResponse()
      .then(saveSourceResponse => {
      console.log("saveSourceResponse",saveSourceResponse);
        return this.validateSource();
      }).then(validateSourceResponse => {
          console.log("validateSourceResponse",validateSourceResponse);
        return this.saveCurrentSource(validateSourceResponse);
      }).then(saveCurrentSourceResponse => {
          console.log("saveCurrentSourceResponse",saveCurrentSourceResponse);
        return saveCurrentSourceResponse;
      });
    resolve(isValid);
  });
}
Run Code Online (Sandbox Code Playgroud)

javascript promise

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