React JSX中的try-catch语句

时间:2018-08-14 03:45:04

标签: reactjs jsx

根据JSX reference,这就是try-catch语句的样子

try {
  statement*
} [catch (varname : type) {
  statement*
}]* [finally {
  statement*
}]

我尝试了以下

try {
  console.log(window.device.version)
} catch (e : TypeError) {
  console.log('Error')
}

哪个会导致错误

  

模块构建失败:SyntaxError:意外令牌,应为)(11:15)

9  |     try {
10 |       console.log(window.device.version)
11 |     } catch (e : TypeError) {
   |                ^
12 |       console.log('Error')
13 |     }
14 |     return (

然后在JSX中使用try-catch语句的正确方法是什么?

5 个答案:

答案 0 :(得分:1)

反应JSX

它看起来像TypeScript样式。只需使用try{ } catch(e) { console.error(e); }就可以了。

看看MDN,不要忘记JSX只是React.createElement的语法糖。

JSX-更快,更安全,更容易的JavaScript

您提到的链接不是是React React JSX,而是一个全新的东西,叫做DeNA JSX。

在DeNA JSX中查看this issuethis PR

答案 1 :(得分:1)

在JSX或JavaScript中,您可以这样编写

gcc -o cal cal.c `pkg-config --cflags --libs gtk+-2.0` -static

如果您使用的是TypeScript,则以前的代码应该可以使用

希望有帮助

答案 2 :(得分:1)

异常处理具有以下语法。

try {

  // code...

} catch (err) {

  // error handling

}

查看此内容:https://javascript.info/try-catch

但是try-catch不会捕获React.js代码中的所有错误。 try-catch将检测命令式代码中的错误,而React本质上是声明性的

使用React 16及更高版本中定义的错误边界。

  1. 使用componentDidCatch创建组件

  2. 使用错误边界环绕要测试的组件。

请参阅此-(官方的反应文档):https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html

答案 3 :(得分:1)

try语句使您可以测试代码块中的错误。

catch语句可让您处理错误。

throw语句使您可以创建自定义错误。

final语句使您可以在尝试并捕获之后执行代码,而不管结果如何。


基本概念如下:

  try {
    Block of code to try
}
catch(err) {
    Block of code to handle errors
}

所以,现在让我们提出一个会发生错误的场景:

// It will try to run the task, but it will faild

try {
  eval(console.log("Hello world));  // Just add the missing quote at the end of 'world' word and it will pass :) 
}

// So, here is where we catch the error and display it to the user

catch(error) { 
  console.error(error);
  
  // expected output:
  // "message": "Uncaught SyntaxError: Invalid or unexpected token"
  // Note - error messages will vary depending on browser
}

答案 4 :(得分:-1)

try{
// code for error testing
   }
catch (e) {
// code for error handeling
            console.log(e)
}