通过引用的setState在useEffect内部不起作用?

时间:2020-03-17 14:32:20

标签: reactjs react-hooks react-ref react-effects

我正在尝试使用useRef viz清除反应表组件的filtered状态。 ref.current.setState({...})。 这是我的组件的一个片段:

const Customers = (props) => {
  const customerTableRef = useRef()

  useEffect(() => {
    const customerTable = customerTableRef.current
    if (customerTable) {
      customerTable.setState({ ...customerTable.state, filtered: [] })
      console.log("table effect::", customerTable.state)
    }
  }, [props.selectedDealer])

我在UI中有一个选择输入,该输入绑定到props.selectedDealer,我想在用户更改props.selectedDealer时清除反应表的过滤器。 反应表组件在Customers组件中不可用,但在层次结构中处于非常低的级别:

Customers > CustomersTable > AppTableWrapper > AppTable > ReactTable

我正在将customerTableRef传递到ReactTable。在开发工具中,我可以看到ref被组件选项夸大了,但是customerTable.setState({ ...customerTable.state, filtered: []})并未改变ReactTable的状态。

1 个答案:

答案 0 :(得分:0)

我建议将customerTable传递给redux。在我们通过redux将其传递给您的组件之后。 在状态变量中:useState或useReducer。状态变量的更新将导致组件的重新渲染。 在ref中:等效于类组件中的实例变量。更改.current属性不会导致重新渲染