问题描述
我正在使用 React(样式化组件)+ Redux 来构建应用程序,但我在想办法解决这个问题时遇到了麻烦。
我有一个组件 TextBox,我将其导入以在其他组件中重用。在用于 Modal 组件之前,它运行良好。
问题是当 dispatch 触发时,整个 AddPedido 被重新渲染,这导致 textBox 失去焦点。
我尝试过的事情:
需要考虑的事项:
- 在模态之外使用时,正常工作;
- 如果我将 TextBox 直接声明为 Modal 子项,它也可以使用
因此,我试图找到一种方法来使用 AddPedido 作为 Modal 子项,而不是对其进行硬编码。
import Modal from '../../../components/modal'
import { AddPedido } from './addPedido/addPedido.jsx'
const vendas = (props) => {
return (
<>
<Modal
layer="layer1"
closeModal={ closeAddPedido }
>
<AddPedido/>
</Modal>
</>
)
}
export default vendas
模态组件:
import {ModalBody,ModalContent,ModalHeader,ModalFooter,ModalShadow} from './style'
const Modal = (props) => {
const modalContainer = () => {
return(
<>
<ModalShadow
onClick={props.closeModal}
/>
<ModalBody>
<ModalContent>
{props.children}
</ModalContent>
</ModalBody>
</>
)
}
return ReactDOM.createPortal(modalContainer(),document.getElementById(props.layer),);
}
export default Modal
AddPedido 组件:
import { useSelector,usedispatch } from 'react-redux'
import {singleAction} from '../../../../storage/Actions'
import TextBox from '../../../../components/textBox'
export const AddPedido = () => {
const refPedido = useSelector(state => state.vendas_formPedido.refPedido)
return (
<>
<TextBox
name="Ref. Pedido"
value={refPedido}
setValue='FORM_PEDIDO__SET_REF_PEDIDO'
/>
</>
)
}
TextBox 组件:
import {usedispatch} from 'react-redux'
import {singleAction} from '../../storage/Actions'
import { Input,PlaceHolder } from './style'
const InputComponent = (props) => (
<Input
onChange={props.onChange}
onClick={props.onClick}
onUpdate={props.onUpdate}
type={props.type}
name={props.name}
value={props.value}
editable={props.editable}
required
/>
)
const TextBox = (props) => {
const dispatch = usedispatch()
const dispatchHandler = (setValue,value) => {dispatch(singleAction(setValue,value))}
const onFocusHandler = (e) => props.editable == false ? e.target.blur() : props.onFocus
return (
<>
<InputComponent
onChange={e => dispatchHandler(props.setValue,e.target.value)}
onClick={props.onClick}
onUpdate={(props) => props.onUpdate}
type={props.type}
name={props.name}
value={props.value}
editable={props.editable}
/>
<PlaceHolder>
{props.name}
</PlaceHolder>
</>
)
}
export default TextBox
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)