我有一个模式,用户需要填写他的电子邮件广告。问题是输入字段在每次键入字母后都会失去状态。
父组件:
const { show: openExampleMailingModal, ExampleMailingModal } = useExampleMailingHook(mailable);
<ExampleMailingModal />
示例MailingModal:
import React, { useState } from 'react';
import Modal from '@/crm/Shared/Modals/Modal';
import TextInput from '@/crm/Shared/TextInput';
export const useExampleMailingHook = (mailable) => {
const [isVisible, setIsVisible] = useState(false);
const [email, setEmail] = useState('');
const show = () => setIsVisible(true);
const hide = () => setIsVisible(false);
const ExampleMailingModal = () => (
<>
{isVisible && (
<Modal close={hide}>
<>
<TextInput
key="test123"
name="email"
placeholder="Email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
</>
</Modal>
)}
</>
);
return {
show,
hide,
ExampleMailingModal,
};
};
文本输入:
import React from 'react';
export default ({ label, name, className, type = 'text', errors = [], ...props }) => {
return (
<div className={className}>
{label && (
<label htmlFor={name} className="block text-sm font-medium text-gray-700">
{label}
</label>
)}
<input
id={name}
name={name}
type={type}
{...props}
className={`mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm ${
errors.length ? 'border-red-500' : ''
}`}
/>
{errors && <div className="text-red-500 text-sm mt-1">{errors}</div>}
</div>
);
};
我在其他几个地方使用输入字段。但在我的模态中,它不是。我做错了什么?
在每个渲染周期中,您都声明了一个新的asspleMailingModal
,因此旧的一个被卸载,一个新的实例被挂载。这就是为什么每次重新渲染后都会失去焦点。
将ExampleMailingModal
组件移到钩子之外,这样它就不会被重新声明,并返回JSX。
const ExampleMailingModal = ({ isVisible, hide, ...inputProps }) =>
isVisible ? (
<Modal close={hide}>
<TextInput
key="test123"
name="email"
placeholder="Email"
{...inputProps}
/>
</Modal>
) : null;
const useExampleMailingHook = (mailable) => {
const [isVisible, setIsVisible] = useState(false);
const [email, setEmail] = useState("");
const show = () => setIsVisible(true);
const hide = () => setIsVisible(false);
return {
show,
hide,
ExampleMailingModal: (
<ExampleMailingModal
isVisible={isVisible}
hide={hide}
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
)
};
};
用法:
const { show, hide, ExampleMailingModal } = useExampleMailingHook();
...
{ExampleMailingModal}
我遇到了一个奇怪的错误,我的搜索输入组件,它失去了对每个按键的关注,不知道为什么。 我还得到了一个
我在提交复合组件方面有问题。 我的大多数复合组件都包含输入组件和“提交”按钮。当我试图将按钮仍然放在相同的h:form中但不放在相同的复合组件中时,提交的值似乎“丢失”在某个地方。例如,我的验证器被调用原始值。 不起作用。当我调试我的验证器时,我可以看到修改的值甚至没有提交。getLocalValue、getSubmittedValue和getValue均未更改。 复合组件声明中有语法可以用来纠正
我已经用ReactJS和ES6进行了几天的实验,并创建了两个组件,即
我遇到了一个非常奇怪的问题,我无法理解。我目前正在使用一个创建反应应用程序,使用反应16.3和Antd 3.11框架,我已经创建了一个表,在它的标题列中呈现一个带有onChange事件的组件。 当我第一次聚焦输入时,问题就出现了。 我在第一个关键事件上失去了焦点,之后当我再次单击该字段时,它将保持焦点,直到我单击其他内容。 下面是我一直在使用的例子:https://ant.design/compo
在我下面的组件中,输入字段在键入字符后失去焦点。当使用Chrome的Inspector时,看起来整个表单都在重新呈现,而不仅仅是输入字段的value属性。 我没有从eslint或Chrome Inspector得到任何错误。 提交表单本身的工作方式与实际输入字段的工作方式相同,当表单位于渲染的返回中或作为单独的组件导入时,而不是按照下面的编码方式。 为什么会这样? 主页组件 文本输入组件 提交按钮
问题内容: 我面临一个相当愚蠢的问题。我正在创建我的第一个React应用程序,遇到一个小问题,提交表单后,我无法清除输入值。尝试谷歌搜索此问题,在这里找到了一些类似的线程,但我无法解决。我不想更改组件/应用程序的状态,而只是将输入的值更改为空字符串。我尝试清除函数中输入的值,但出现错误: “无法设置未定义的属性’值’”。 我的SearchBar组件: 问题答案: 您有一个受控组件,其值由决定。因此