0
我有一個mixin,它將一些輔助功能增強應用於我的React組件。目前,它只是試圖以智能聚焦元素的頁面,提示到屏幕閱讀器的用戶一個新的頁面加載上:重構mixin到包裝組件
import React from "react"
const componentDidMount =() => {
const autofocus = document.querySelector("main [autofocus]")
const fakeAutofocus = document.querySelector("main #autofocus")
const h1 = document.querySelector("main h1")
if(autofocus)
autofocus.focus()
else if(fakeAutofocus) {
origTabindex = fakeAutofocus.tabIndex
if(!origTabindex || origTabindex == -1)
fakeAutofocus.tabIndex = 0
fakeAutofocus.focus()
if(!origTabindex)
fakeAutofocus.tabIndex = -1
else
fakeAutofocus.tabIndex = origTabindex
} else if(h1) {
h1.tabIndex = 0
h1.focus()
h1.tabIndex = -1
}
}
export default {
componentDidMount
}
混合到這一點我頂層組件已經很好地工作。
現在我試圖擺脫混入的,並切換到包裝部件:
export const Accessible = (component) => {
return class extends React.Component {
componentDidMount() {
componentDidMount()
}
render() {
return component()
}
}
}
除了我似乎無法得到渲染功能權限。
如果我返回<component/>
,則不呈現。如果我返回component(),我有時會得到一個控制檯錯誤,我直接調用一個React組件,但不應該這樣做。我也很確定這不會正確處理屬性。
我有一個儀表盤無狀態組件,看起來像這樣:
const Dashboard =() => <Grid fluid={true}>
<Row>
<Col md={12}>
<h1>Dashboard</h1>
</Col>
</Row>
<Row>
<Col md={6}>
<LeftPanel/>
</Col>
<Col md={6}>
<RightPanel/>
</Col>
</Row>
</Grid>
然後我做的:
export Accessible(Dashboard)
,使其訪問。如果我的可訪問組件返回<dashboard/>
,則它不會呈現。如果它調用該函數,則一切正常,但在以Accessible訪問時組件類會失敗。必須有一個更強大的方法來做到這一點,我錯過了。
謝謝。