【问题标题】:Success message not rendered in UI in reactjsreactjs的UI中未呈现成功消息
【发布时间】:2021-10-29 07:19:27
【问题描述】:

我已经使用 React js 中的钩子成功地执行了 post-Axios 调用。但是在提交表单后,API 响应中的消息不会在 UI 中呈现。我可以在控制台中看到消息,但在 UI 中看不到。

const MessageForm = () => {
  const [message, setMessage] = useState(null);
  const url = "https://example.herokuapp.com/api/messages"
  const [data, setData] = useState({
    first_name: "",
    last_name: "",
    email:"",
    phone:"",
    msz:""

  })
  function submit(e){
    e.preventDefault();
    setMessage(null);
    axios.post(url,{
      first_name: data.first_name,
      last_name:data.last_name,
      email:data.email,
      phone:data.phone,
      msz:data.msz
    })
    .then(res=>{
      console.log(res.data)
      setMessage(res.message)
      console.log(res.message)
    })
    .catch(err => {
      setMessage(err.message);
    })
    setData({
        first_name: "",
        last_name: "",
        email:"",
        phone:"",
        msz:""
    
      });
  }

  function handle(e){
      const newdata = {...data}
      newdata[e.target.id] = e.target.value
      setData(newdata)
      console.log(newdata)
      
      // setData("");
  }

  return (
    <div className="message-form">
      <div className="container">
        <div className="title">
          <span>Contact Now</span>
          <div className="main-title">Send us a message</div>
        </div>
        {/* form start */}
        <form action="" className="apply" onSubmit={(e)=> submit(e)}>
        {message}
          <div className="row row-1">
            {/* Name here */}
            <div className="input-field name">
              <label htmlFor="Name">First Name</label>
              <input onChange ={(e) => handle(e)} value = {data.first_name}
                required 
                type="text"
                placeholder="Your First Name"
                name="Name"
                id="first_name"
              />
            </div>
            <div className="input-field name">
              <label htmlFor="Name">Last Name</label>
              <input onChange ={(e) => handle(e)} value = {data.last_name}
                required
                type="text"
                placeholder="Your Last Name"
                name="Name"
                id="last_name"
              />
            </div>
          </div>

          <div className="row row-2">
            {/* phone here */}
            <div className="input-field phone">
              <label htmlFor="Phone">Phone</label>
              <input onChange ={(e) => handle(e)} value = {data.phone}
                required
                type="text"
                placeholder="Your Phone Here"
                name="Phone"
                id="phone"
              />
            </div>

            {/* Email here */}
            <div className="input-field email">
              <label htmlFor="Email">Email Address</label>
              <input onChange ={(e) => handle(e)} value = {data.email}
                required 
                type="text"
                placeholder="Your Email Address"
                name="Email"
                id="email"
              />
            </div>
          </div>

          {/* date select */}
          <div className="row row-3">
            {/* Message here */}
            <div className="input-field message">
              <label htmlFor="Message">Message</label>
              <textarea onChange ={(e) => handle(e)} value = {data.msz}
                required
                placeholder="Enter Message Here"
                name="Message"
                id="msz"
              />
            </div>
          </div>

          {/* submit button */}
          <ExploreButton hoverText="Submit" hover="hoverTrue">
            Send Now
          </ExploreButton>
        </form>
        {/* Form end */}
      </div>
    </div>
  );
};

export default MessageForm;

这里我将 jsx {message} 放在表单提交的下方,但它没有呈现在 ui 中。

【问题讨论】:

  • 你能不能把console.log(message)放在return外面来检查状态更新后渲染时是否更新了messagemessage 是否有可能因为它包含在 html 标签中而没有显示?

标签: javascript reactjs api user-interface react-hooks


【解决方案1】:

您的代码中的一切都正常))您只需在 &lt;form&gt; 中插入一条消息并看不到它:https://codesandbox.io/s/react-playground-forked-ch4ij?file=/MessageForm.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 2019-08-10
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多