小编Col*_*ini的帖子

Test React组件方法调用函数pass作为prop

我想测试一下,当从React组件调用一个方法时,它会触发一个函数传递给组件作为道具.方法是这样的:

customMethod() {
  // Do something

  this.props.trackEvent({
    category: 'eventCategory',
    action: 'eventAction',
    label: 'eventAction',
  });

  // Do something else
}
Run Code Online (Sandbox Code Playgroud)

可以通过不同的方式调用该方法,因此我只想进行一般测试:如果调用了customMethod,则应该使用数据触发this.props.trackEvent.

有没有办法用jest和/或酶触发方法调用?我读到过这样的事情:

const wrapper = shallow(<AdPage {...baseProps} />);
wrapper.instance().customMethod();
Run Code Online (Sandbox Code Playgroud)

但它不起作用......任何想法.我在测试中很新,所以我应该使用不同的方法进行这种测试?

testing reactjs jest enzyme

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

Chrome 将 Notification.requestPermission() 的“默认”结果视​​为“拒绝”

Notification.requestPermission()有3个可能的结果:granteddenieddefault

在 Chrome 中,default当用户使用 X 而不是明确地说block. 但是,如果在获取default结果后,您调用Notification.permissionget denied,则将来无法再次尝试请求许可。

这是故意的吗?有没有办法让铬对这两个结果进行不同的处理?Firefox 会以正确的方式处理此问题(您可以请求权限,直到用户明确拒绝)

javascript permissions google-chrome push-notification

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

React Intl:在通用应用程序中异步加载一种特定的区域设置数据

我正在使用 React 制作一个多语言通用应用程序,但我很难找到处理区域设置数据的最佳方法。该应用程序将提供 16 种语言版本,并且翻译的消息量非常大,因此我无法将所有消息加载到一个大 json 中(因为它在大多数 React-intl 示例中使用),而且我也无法将这些消息导入 webpack 生成的包中,我只需要按需加载用户语言消息。当应用程序仅在客户端运行时我能够做到这一点,但我也需要它在服务器端运行。我使用express 进行服务器端渲染,使用webpack 进行捆绑。任何人都可以帮助找到处理这个问题的最佳方法吗?

internationalization reactjs webpack react-intl

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

React:以编程方式更改组件值不会触发 onChange 事件

我在 React 组件中有一个选择字段,它的值是通过组件状态设置的,并且有一个附加到 onChange 事件的函数。如果我手动更改选择字段值,则会触发 onChange 事件,但如果我通过更改另一个函数的状态值来更改它,则不会触发 onChange 事件。有没有办法以编程方式触发事件?

编辑:

下面是我需要实现的目标的基本示例。这个想法是,当handleChange1()更改state.val2的值(并因此更改在第二个选择字段上选择的选项)时,handleChange2()也会被触发,因此合成事件被传递到父函数(在实际中)代码,选择字段是另一个组件):

class Component extends React.Component {
  state = {
    val1: 1,
    val2: 1,
  }

  handleChange1 = (event) => {
    const val2 = event.target.value === 3 ? 1 : null;
    this.setState({
      val1: event.target.value,
    });
    if (event.target.value === 3) {
      this.setState({
        val2: 1,
      });
    }
    this.props.parentFunction(event);
  }

  handleChange2 = (event) => {
    this.setState({
      val2: event.target.value,
    });
    this.props.parentFunction(event);
  }

  render() {
    return (
        <div>
          <select value={val1} onChange={this.handleChange1}>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option> …
Run Code Online (Sandbox Code Playgroud)

reactjs

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