关于在 react 组件外部但在文件内部变量作用域

来源:1-1 课程导学

qq_小江南_04298178

2021-06-02

在工作中无论是类组件还是 hook 组件都遇到过类似的问题,一些变量在组件文件中但在组件之外,这些变量的作用域是什么样的?

如下:

hook 组件的 isSave 变量

let isSave = false
export default function SampleProTable(props:IProps){
  const {tableUUID} = props
  const [columnsStateMap,setColumnsStateMap]= useState({})
  const {prefixCls,rowKey,columnEmptyText,pagination,headerTitle,toolBarRender,size,loading=false} =props

  if(!tableUUID){
    console.error('tableUUID is required!!!')
  }
  useEffect(()=>{
    async function initData(tableUUID:string){
      const [err,config]  = await asyncErrorCatch(getTableColumnConfig(tableUUID))
      if(err){
        return
      }
      const {data} = config
      const {data:dataContent} = data
      const {fields} =dataContent
      const columnsStateMap = fields2ColumnsStateMap(fields)||{}
      if(columnsStateMap){
        isSave = false
        setColumnsStateMap(columnsStateMap)
      }
    }

    if(tableUUID){
      initData(tableUUID)
    }
    return ()=>{
      isSave = false
    }

  },[tableUUID])

  const debounceColumnsStateMap = useDebounce(columnsStateMap, 1000);

  useEffect(() => {
    if(!isSave) return
    saveTableColumnConfig(tableUUID,columnsStateMap2Fields(columnsStateMap))
  }, [debounceColumnsStateMap]);

  function onColumnsStateChange(columnsStateMap: IColumnsStateMap){
    isSave = true
    setColumnsStateMap(columnsStateMap)
  }

  return (
      <div className={`SampleProTable_container ${props.className}`}>
        <ProTable
          ...
        />
      </div>
  );
}

类组件的

const formFieldLayout = {
  labelCol: {
    xs: { span: 3 },
    sm: { span: 3 }
  },
  wrapperCol: {
    xs: { span: 16 },
    sm: { span: 16 }
  }
}

const formTableLayout = {
  labelCol: {
    xs: { span: 0 },
    sm: { span: 0 }
  },
  wrapperCol: {
    xs: { span: 24 },
    sm: { span: 24 }
  }
}

let isEditPaper = false

const QuestionTypeName = ['单选', '多选', '判断', '填空', '简答']

/**
 * @desc 新建试卷
 */
class PaperEdit extends React.Component {
}
写回答

1回答

Nolan

2021-06-05

hook、函数式组件、类组件没什么特别的,从js角度来说它们只是普通的函数,作用域也就是普通的函数作用域

0
0

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程