为 React、Redux 和 API 添加条件
Adding conditional to react, redux, and API
我想知道如何使用 React、Redux 和 API 更新表单。我想向我的组件添加一个条件。好像页面处于编辑模式,我想将页面更改为编辑模式,如果不是,则按正常方式呈现页面。
我希望用户能够进行更新并将这些更改保存到后端。
class SingleCampus extends React.Component {
componentDidMount() {
this.props.getUser(this.props.match.params.id);
}
render() {
const { User } = this.props;
const hasTest = user.tests && user.tests.length;
return (
<div>
<div className="single-user">
<h1>{user.name}</h1>
<im`enter code here`g src={user.imageUrl} alt={user.name} />
<h3>
<b>Address:</b>
{user.address}
</h3>
<b>Description:</b>
<p> {user.description}</p>
</div>
<hr />
{hasTest ? (
<React.Fragment>
<div>
{user.tests.map((test) => {
return (
<span key={test.id}>
<Link to={`/test/${test.id}`}>
<h3>
{test.grade}
</h3>
</Link>
</span>
);
})}
</div>
</React.Fragment>
) : (
<h2>There are no test for this user!</h2>
)}
</div>
);
}
}
const mapState = (state) => ({
user: state.user,
});
const mapDispatch = (dispatch) => ({
getUser: (id) => {
dispatch(fetchSingleUser(id));
},
});
`
一个简单的方法是向你的状态添加一个变量,(无论是本地状态还是 Redux 状态)
例如
// I suppose this is your Redux state used to map state to props?
const mapState = (state) => ({
user: state.user,
isDisabled: state.isDisabled,
});
将组件中的文本值更改为文本框,您可能需要使用一些 UI 包,例如 Material UI.
然后,将其禁用取决于您的 isDisabled 状态值
此外,在值更改时,您需要实施以发送更新后的值。
import TextField from '@material-ui/core/TextField';
......
<b>Description:</b>
<p> {user.description}</p>
<TextField
value={user.description}
onChange={handleChange} // update description value and dispatch the user object
InputProps={{
readOnly: props.isDisabled,
}}
/>
最后,如果在只读模式下添加一个按钮来更改isDisabled值,在编辑模式下处理保存
import Button from '@material-ui/core/Button';
......
<Button
variant="contained"
onClick={handleEditSave} // handle edit/save logic
>{props.isDisabled ? `Edit` : `Save`}
</Button>
我想知道如何使用 React、Redux 和 API 更新表单。我想向我的组件添加一个条件。好像页面处于编辑模式,我想将页面更改为编辑模式,如果不是,则按正常方式呈现页面。
我希望用户能够进行更新并将这些更改保存到后端。
class SingleCampus extends React.Component {
componentDidMount() {
this.props.getUser(this.props.match.params.id);
}
render() {
const { User } = this.props;
const hasTest = user.tests && user.tests.length;
return (
<div>
<div className="single-user">
<h1>{user.name}</h1>
<im`enter code here`g src={user.imageUrl} alt={user.name} />
<h3>
<b>Address:</b>
{user.address}
</h3>
<b>Description:</b>
<p> {user.description}</p>
</div>
<hr />
{hasTest ? (
<React.Fragment>
<div>
{user.tests.map((test) => {
return (
<span key={test.id}>
<Link to={`/test/${test.id}`}>
<h3>
{test.grade}
</h3>
</Link>
</span>
);
})}
</div>
</React.Fragment>
) : (
<h2>There are no test for this user!</h2>
)}
</div>
);
}
}
const mapState = (state) => ({
user: state.user,
});
const mapDispatch = (dispatch) => ({
getUser: (id) => {
dispatch(fetchSingleUser(id));
},
});
`
一个简单的方法是向你的状态添加一个变量,(无论是本地状态还是 Redux 状态) 例如
// I suppose this is your Redux state used to map state to props?
const mapState = (state) => ({
user: state.user,
isDisabled: state.isDisabled,
});
将组件中的文本值更改为文本框,您可能需要使用一些 UI 包,例如 Material UI.
然后,将其禁用取决于您的 isDisabled 状态值
此外,在值更改时,您需要实施以发送更新后的值。
import TextField from '@material-ui/core/TextField';
......
<b>Description:</b>
<p> {user.description}</p>
<TextField
value={user.description}
onChange={handleChange} // update description value and dispatch the user object
InputProps={{
readOnly: props.isDisabled,
}}
/>
最后,如果在只读模式下添加一个按钮来更改isDisabled值,在编辑模式下处理保存
import Button from '@material-ui/core/Button';
......
<Button
variant="contained"
onClick={handleEditSave} // handle edit/save logic
>{props.isDisabled ? `Edit` : `Save`}
</Button>