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