If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React, { useCallback, useState } from 'react';
import TextBox, { TextBoxTypes } from 'devextreme-react/text-box';
const nameLabel = { 'aria-label': 'Name' };
const fullNameLabel = { 'aria-label': 'Full Name' };
const passwordLabel = { 'aria-label': 'Password' };
const maskLabel = { 'aria-label': 'Mask' };
const emailLabel = { 'aria-label': 'Email' };
const rules = { X: /[02-9]/ };
function App() {
const [emailValue, setEmailValue] = useState('smith@corp.com');
const valueChanged = useCallback((data: TextBoxTypes.ValueChangedEvent) => {
setEmailValue(`${data.value.replace(/\s/g, '').toLowerCase()}@corp.com`);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With placeholder</div>
<div className="dx-field-value">
<TextBox
placeholder="Enter full name here..."
inputAttr={fullNameLabel}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With clear button</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
showClearButton={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Password mode</div>
<div className="dx-field-value">
<TextBox
mode="password"
inputAttr={passwordLabel}
placeholder="Enter password"
showClearButton={true}
defaultValue="f5lzKs0T"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Text mask</div>
<div className="dx-field-value">
<TextBox
mask="+1 (X00) 000-0000"
inputAttr={maskLabel}
maskRules={rules}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
disabled={true}
/>
</div>
</div>
</div>
<div className="dx-fieldset">
<div className="dx-fieldset-header">Events and API</div>
<div className="dx-field">
<div className="dx-field-label">Full Name</div>
<div className="dx-field-value">
<TextBox
defaultValue="Smith"
inputAttr={fullNameLabel}
showClearButton={true}
placeholder="Enter full name"
valueChangeEvent="keyup"
onValueChanged={valueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Email (read only)</div>
<div className="dx-field-value">
<TextBox
readOnly={true}
inputAttr={emailLabel}
hoverStateEnabled={false}
value={emailValue}
/>
</div>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React, { useCallback, useState } from 'react';
import TextBox from 'devextreme-react/text-box';
const nameLabel = { 'aria-label': 'Name' };
const fullNameLabel = { 'aria-label': 'Full Name' };
const passwordLabel = { 'aria-label': 'Password' };
const maskLabel = { 'aria-label': 'Mask' };
const emailLabel = { 'aria-label': 'Email' };
const rules = { X: /[02-9]/ };
function App() {
const [emailValue, setEmailValue] = useState('smith@corp.com');
const valueChanged = useCallback((data) => {
setEmailValue(`${data.value.replace(/\s/g, '').toLowerCase()}@corp.com`);
}, []);
return (
<div>
<div className="dx-fieldset">
<div className="dx-field">
<div className="dx-field-label">Default mode</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With placeholder</div>
<div className="dx-field-value">
<TextBox
placeholder="Enter full name here..."
inputAttr={fullNameLabel}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">With clear button</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
showClearButton={true}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Password mode</div>
<div className="dx-field-value">
<TextBox
mode="password"
inputAttr={passwordLabel}
placeholder="Enter password"
showClearButton={true}
defaultValue="f5lzKs0T"
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Text mask</div>
<div className="dx-field-value">
<TextBox
mask="+1 (X00) 000-0000"
inputAttr={maskLabel}
maskRules={rules}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Disabled</div>
<div className="dx-field-value">
<TextBox
defaultValue="John Smith"
inputAttr={nameLabel}
disabled={true}
/>
</div>
</div>
</div>
<div className="dx-fieldset">
<div className="dx-fieldset-header">Events and API</div>
<div className="dx-field">
<div className="dx-field-label">Full Name</div>
<div className="dx-field-value">
<TextBox
defaultValue="Smith"
inputAttr={fullNameLabel}
showClearButton={true}
placeholder="Enter full name"
valueChangeEvent="keyup"
onValueChanged={valueChanged}
/>
</div>
</div>
<div className="dx-field">
<div className="dx-field-label">Email (read only)</div>
<div className="dx-field-value">
<TextBox
readOnly={true}
inputAttr={emailLabel}
hoverStateEnabled={false}
value={emailValue}
/>
</div>
</div>
</div>
</div>
);
}
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
This demo illustrates the following TextBox properties:
-
value
A value the TextBox displays. -
placeholder
An input prompt the TextBox displays when the value is not defined. -
showClearButton
Specifies whether to display the button that clears the TextBox value. -
mode
Affects a set of keyboard characters displayed on a mobile device when the TextBox gets focus and modifies the component's display style. In this example, the mode is set to "password" so that entered characters are obscured, and the password cannot be read. -
mask
An input mask. -
maskRules
Custom mask rules. -
disabled
Specifies whether the TextBox responds to user interaction. -
onValueChanged event handler
Use this function to perform an action when a user enters a new value. In this demo, this function uses the entered value to construct a dummy email address and assign it to another TextBox. -
valueChangeEvent
One or several DOM events that trigger the onValueChanged event handler. -
readOnly
Prevents users from changing the editor's value. -
hoverStateEnabled
Specifies whether the TextBox responds when users long press or hover the mouse pointer over it.