在函数外使用 useState 时如何获取值?
How do I get the value when using useState outside of the function?
我正在尝试在代码中采用这种形式并制作它,这样我就可以将它放入数据中,这样我就可以 post 它到我的数据库中。
有没有办法获取步骤useState的值并将其设置为状态?
这里是useState的具体函数
const StepInput = () => {
const [steps, setSteps] = useState([{ value: null }]);
function handleChange(i, event) {
const values = [...steps];
values[i].value = event.target.value;
setSteps(values);
}
function handleAdd() {
const values = [...steps];
values.push({ value: null });
setSteps(values);
}
function handleRemove(i) {
const values = [...steps];
values.splice(i, 1);
setSteps(values);
}
return (
<div>
<button type="button" onClick={() => handleAdd()}>
+
</button>
{steps.map((step, idx) => {
return (
<div key={`${step}-${idx}`}>
<input
type="text"
placeholder="Enter Step"
value={step.value || ""}
onChange={e => handleChange(idx, e)}
/>
<button type="button" onClick={() => handleRemove(idx)}>
X
</button>
</div>
);
})}
</div>
)
}
这里就是调用它的地方。这是我将使用 Axios post处理数据的地方。
export default class RecipeCreationForm extends Component {
constructor(props) {
super(props)
this.state = {
recipe_name: "",
recipe_difficulty: "",
}
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({
[event.target.name]: event.target.value,
errorText: ""
})
}
handleSubmit(event) {
console.log(this.value.props.step)
}
render() {
return (
<div>
<form>
<input
className="input-box"
type="text"
name="recipe_name"
placeholder="Recipe Name"
value={this.state.recipe_name}
onChange={this.handleChange}
/>
<input
className="input-box"
type="text"
name="recipe_difficulty"
placeholder="Recipe difficulty 1-10"
value={this.state.recipe_difficulty}
onChange={this.handleChange}
/>
<StepInput />
<button type="submit">Create Recipe</button>
</form>
</div>
)
}
}
朋友有很多办法
最简单和最推荐的案例就是为你的回调函数传递一个回调函数
步进输入。
// at RecipeCreationForm
simpleCallback= (stepInpuData) =>{
// your code here
}
<StepInput simpleCallback={simpleCallback}
// on your step input file
const StepInput = ({simpleCallback}) =>{
useEffect(() => {
simpleCallback(steps)
}, [steps])
对于更复杂的情况,你有 redux。
但你也可以使用 Apollo(Redux 太复杂了)
我正在尝试在代码中采用这种形式并制作它,这样我就可以将它放入数据中,这样我就可以 post 它到我的数据库中。
有没有办法获取步骤useState的值并将其设置为状态?
这里是useState的具体函数
const StepInput = () => {
const [steps, setSteps] = useState([{ value: null }]);
function handleChange(i, event) {
const values = [...steps];
values[i].value = event.target.value;
setSteps(values);
}
function handleAdd() {
const values = [...steps];
values.push({ value: null });
setSteps(values);
}
function handleRemove(i) {
const values = [...steps];
values.splice(i, 1);
setSteps(values);
}
return (
<div>
<button type="button" onClick={() => handleAdd()}>
+
</button>
{steps.map((step, idx) => {
return (
<div key={`${step}-${idx}`}>
<input
type="text"
placeholder="Enter Step"
value={step.value || ""}
onChange={e => handleChange(idx, e)}
/>
<button type="button" onClick={() => handleRemove(idx)}>
X
</button>
</div>
);
})}
</div>
)
}
这里就是调用它的地方。这是我将使用 Axios post处理数据的地方。
export default class RecipeCreationForm extends Component {
constructor(props) {
super(props)
this.state = {
recipe_name: "",
recipe_difficulty: "",
}
this.handleChange = this.handleChange.bind(this);
}
handleChange(event) {
this.setState({
[event.target.name]: event.target.value,
errorText: ""
})
}
handleSubmit(event) {
console.log(this.value.props.step)
}
render() {
return (
<div>
<form>
<input
className="input-box"
type="text"
name="recipe_name"
placeholder="Recipe Name"
value={this.state.recipe_name}
onChange={this.handleChange}
/>
<input
className="input-box"
type="text"
name="recipe_difficulty"
placeholder="Recipe difficulty 1-10"
value={this.state.recipe_difficulty}
onChange={this.handleChange}
/>
<StepInput />
<button type="submit">Create Recipe</button>
</form>
</div>
)
}
}
朋友有很多办法
最简单和最推荐的案例就是为你的回调函数传递一个回调函数 步进输入。
// at RecipeCreationForm
simpleCallback= (stepInpuData) =>{
// your code here
}
<StepInput simpleCallback={simpleCallback}
// on your step input file
const StepInput = ({simpleCallback}) =>{
useEffect(() => {
simpleCallback(steps)
}, [steps])
对于更复杂的情况,你有 redux。
但你也可以使用 Apollo(Redux 太复杂了)