javascript - React - 从另一个文件更新状态的组件

标签 javascript reactjs

假设我有一个 React 组件,例如

    import { getEventListener } from 'controls';
    class SomeComponent extends React.Component {
          render() {
             return (<div onClick={this.handleEvent}></div>) 
          }

          handleEvent = (event) => {
             getEventListener(event, this);
          }
    }

我还有另一个文件,例如

   export function getEventListeners(event, component) {
       component.setState({x: 1};
   }

如果 getEventListeners 从组件调用 set state 来更改其中一个属性,是否会导致问题?

最佳答案

这会导致设计问题,通过引用传递整个组件并在函数中访问它会中断 the principle of least privilege 。使用 getEventListener.call(this, event) 之类的上下文调用函数也会出现同样的问题。

如果 getEventListener 不应该在组件之间重用,则不应从使用它的组件中提取它。它使用 this.setState 方法并且显然属于一个类。如果涉及多重继承,可以使用混合。

React 惯用的解决方案是可重用的 state updater function 。它与组件分离,应该用于纯同步函数:

   export const getEventListeners = event => state => {
     // return state object that derives from an event
   };

   ...

   this.setState(getEventListeners(event));

关于javascript - React - 从另一个文件更新状态的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54563558/

相关文章:

javascript - HTML 元素定位 - 如何在没有 javascript 的情况下让元素始终停留在可见区域

javascript - react 如何重新渲染本地存储中的值更新

css - Foundation Block Grid 小不工作

javascript - 循环内的 React ref 在重新渲染时中断

javascript - Socket IO 发出事件两次

javascript - 将按钮作为 Material-ui 表中的 TableRowColumn

javascript - 多页面应用 React Router v4

javascript - 在javascript代码中使用Rhino解析器解析javascript中的字符串

javascript - NgFor 无法工作 Angular 2

javascript - native 浏览器 promise 一组查询元素